CodeIgniter - bezpieczeństwo
Zapobieganie XSS
XSS oznacza cross-site scripting. CodeIgniter jest wyposażony w zabezpieczenia filtrujące XSS. Ten filtr zapobiega wszelkim złośliwym kodom JavaScript lub innym kodom, które próbują przejąć plik cookie i wykonać złośliwe działania. Aby filtrować dane przez filtr XSS, użyj rozszerzeniaxss_clean() metoda, jak pokazano poniżej.
$data = $this->security->xss_clean($data);
Powinieneś używać tej funkcji tylko podczas przesyłania danych. Opcjonalny drugi parametr logiczny może być również użyty do sprawdzenia pliku obrazu pod kątem ataku XSS. Jest to przydatne przy ładowaniu plików. Jeśli jego wartość jest prawdziwa, oznacza, że obraz jest bezpieczny, a nie inaczej.
Zapobieganie iniekcjom SQL
Wstrzyknięcie SQL to atak na zapytanie do bazy danych. W PHP używamymysql_real_escape_string() function, aby temu zapobiec wraz z innymi technikami, ale CodeIgniter zapewnia wbudowane funkcje i biblioteki, aby temu zapobiec.
Możemy zapobiec iniekcji SQL w CodeIgniter na trzy sposoby -
- Escaping Queries
- Zapytanie Biding
- Klasa Active Record
Escaping Queries
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape() funkcja automatycznie dodaje pojedyncze cudzysłowy wokół danych i określa typ danych, aby można było zmienić tylko dane w postaci łańcuchów.
Zapytanie Biding
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
W powyższym przykładzie znak zapytania (?) Zostanie zastąpiony tablicą w drugim parametrze funkcji query (). Główną zaletą budowania zapytania w ten sposób jest to, że wartości są automatycznie zmieniane, co daje bezpieczne zapytania. Silnik CodeIgniter robi to za Ciebie automatycznie, więc nie musisz o tym pamiętać.
Klasa Active Record
<?php
$this->db->get_where('subscribers_tbl',array
('status'=> active','email' => '[email protected]'));
?>
Przy użyciu rekordów aktywnych składnia zapytania jest generowana przez każdy adapter bazy danych. Umożliwia również bezpieczniejsze zapytania, ponieważ wartości są automatycznie zmieniane.
Ukrywanie błędów PHP
W środowisku produkcyjnym często nie chcemy wyświetlać użytkownikom żadnych komunikatów o błędach. Dobrze, jeśli jest włączony w środowisku programistycznym do celów debugowania. Te komunikaty o błędach mogą zawierać pewne informacje, których ze względów bezpieczeństwa nie powinniśmy pokazywać użytkownikom witryny.
Istnieją trzy pliki CodeIgniter związane z błędami.
Poziom raportowania błędów PHP
Różne środowiska wymagają różnych poziomów raportowania błędów. Domyślnie programowanie pokaże błędy, ale testowanie i na żywo je ukryją. Jest plik o nazwieindex.phpw katalogu głównym CodeIgniter, który jest używany do tego celu. Jeśli przekażemy zero jako argument doerror_reporting() funkcja, która ukryje wszystkie błędy.
Błąd bazy danych
Nawet jeśli wyłączyłeś błędy PHP, błędy MySQL są nadal otwarte. Możesz to wyłączyć wapplication/config/database.php. Ustawdb_debug opcja w $db tablica do FALSE jak pokazano niżej.
$db['default']['db_debug'] = FALSE;
Dziennik błędów
Innym sposobem jest przeniesienie błędów do plików dziennika. Dlatego nie będzie wyświetlany użytkownikom witryny. Po prostu ustawlog_threshold wartość w $config tablica do 1 cala application/cofig/config.php plik, jak pokazano poniżej.
$config['log_threshold'] = 1;
Zapobieganie CSRF
CSRF oznacza fałszowanie żądań między lokacjami. Możesz zapobiec temu atakowi, włączając go wapplication/config/config.php plik, jak pokazano poniżej.
$config['csrf_protection'] = TRUE;
Podczas tworzenia formularza za pomocą form_open()funkcja, automatycznie wstawi CSRF jako ukryte pole. Możesz również ręcznie dodać CSRF przy użyciu rozszerzeniaget_csrf_token_name() i get_csrf_hash()funkcjonować. Plikget_csrf_token_name() funkcja zwróci nazwę CSRF i get_csrf_hash() zwróci wartość skrótu CSRF.
Token CSRF można ponownie wygenerować za każdym razem w celu przesłania lub można go również zachować przez cały okres istnienia pliku cookie CSRF. Ustawiając wartośćTRUE, w tablicy config z kluczem ‘csrf_regenerate’ zregeneruje token, jak pokazano poniżej.
$config['csrf_regenerate'] = TRUE;
Możesz także dodać adresy URL do białej listy z ochrony CSRF, ustawiając je w tablicy config za pomocą klucza ‘csrf_exclude_uris’jak pokazano niżej. Możesz także użyć wyrażenia regularnego.
$config['csrf_exclude_uris'] = array('api/person/add');
Obsługa haseł
Wielu programistów nie wie, jak obchodzić się z hasłami w aplikacjach internetowych, prawdopodobnie dlatego wielu hakerów uważa, że włamanie do systemów jest tak łatwe. Podczas obsługi haseł należy pamiętać o następujących kwestiach -
NIE przechowuj haseł w formacie zwykłego tekstu.
Zawsze haszuj swoje hasła.
NIE używaj kodowania Base64 ani podobnego do przechowywania haseł.
NIE używaj słabych lub uszkodzonych algorytmów mieszających, takich jak MD5 lub SHA1. Używaj tylko silnych algorytmów haszowania haseł, takich jak BCrypt, które są używane we własnych funkcjach haszowania haseł PHP.
Nigdy nie wyświetlaj ani nie wysyłaj hasła w formacie zwykłego tekstu.
NIE nakładaj niepotrzebnych ograniczeń na hasła użytkowników.