Szukaj…


Wprowadzenie

Pamiętaj CodeIgniter to Framework programistyczny. Nie stara się, aby Twoja aplikacja była bezpieczna. To tylko daje narzędzia do zrobienia tego sam. Jeśli spojrzysz na stronę zabezpieczeń CI, jest całkiem jasne, że oczekują od programisty zrozumienia bezpieczeństwa aplikacji i wbudowania go w swoją aplikację.

Jeśli zabezpieczenia WebApp są dla Ciebie stosunkowo nowe, zacznę od OWASP. Korzystne może być spojrzenie na inne frameworki, takie jak Zend lub Cake, które moim zdaniem robią bardziej z góry

Składnia

  • $ freshdata = $ this-> security-> xss_clean ($ user_input_data);

Parametry

tablica danych wejściowych użytkownika pusty
wstaw tablicę danych wejściowych użytkownika do xss_filter($array of user input) Pusty

Zapobieganie XSS

XSS oznacza skrypty między witrynami. CodeIgniter ma wbudowane zabezpieczenia filtrowania XSS. Ten filtr zapobiegnie złośliwemu kodowi JavaScript lub innemu kodowi, który próbuje przejąć plik cookie i wykonać złośliwe działania. Aby przefiltrować dane przez filtr XSS, użyj metody xss_clean (), jak pokazano poniżej.

$data = $this->security->xss_clean($data);

Z tej funkcji należy korzystać tylko podczas przesyłania danych. Opcjonalnego drugiego parametru logicznego można również użyć do sprawdzenia pliku obrazu pod kątem ataku XSS. Jest to przydatne w przypadku funkcji przesyłania plików. Jeśli jego wartość jest prawdziwa, oznacza to, że obraz jest bezpieczny, a nie inaczej.

Zapobieganie iniekcji SQL

Wstrzyknięcie SQL to atak na zapytanie do bazy danych. W PHP używamy funkcji mysql_real_escape_string (), 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 następujące sposoby:

  • Uciekające zapytania
  • Zapytanie ofertowe
  • Aktywna klasa rekordów

Uciekające zapytania

<?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() automatycznie dodaje pojedyncze cudzysłowy wokół danych i określa typ danych, dzięki czemu może on uciec tylko danych łańcuchowych.

Zapytanie ofertowe

<?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 przez tablicę w drugim parametrze funkcji query() . Główną zaletą budowania zapytania w ten sposób jest to, że wartości są automatycznie usuwane, co powoduje bezpieczne zapytania. Silnik CodeIgniter robi to za Ciebie automatycznie, więc nie musisz go pamiętać.

Aktywna klasa rekordów

<?php
   $this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>

Przy użyciu aktywnych rekordów składnia zapytania jest generowana przez każdy adapter bazy danych. Pozwala również na bezpieczniejsze zapytania, ponieważ wartości uciekają automatycznie.

Ukrywanie błędów PHP

W środowisku produkcyjnym często nie chcemy wyświetlać użytkownikom żadnych komunikatów o błędach. Dobrze jest, jeśli jest włączony w środowisku programistycznym do celów debugowania. Te komunikaty o błędach mogą zawierać pewne informacje, których nie powinniśmy pokazywać użytkownikom witryny ze względów bezpieczeństwa.

Istnieją trzy pliki CodeIgniter związane z błędami. Poziom raportowania błędów PHP

Różne środowisko wymaga różnych poziomów raportowania błędów. Domyślnie programowanie pokazuje błędy, ale testy i na żywo je ukrywają. W katalogu głównym CodeIgniter znajduje się plik o nazwie index.php, który służy do tego celu. Jeśli przekażemy zero jako argument funkcji error_reporting (), to ukryje wszystkie błędy.

Zapobieganie CSRF

CSRF oznacza fałszowanie żądań w różnych witrynach. Możesz zapobiec temu atakowi, włączając opcję w pliku application / config / config.php, jak pokazano poniżej.

$config['csrf_protection'] = TRUE;

Kiedy tworzysz formularz za pomocą funkcji form_open() , automatycznie wstawi on token CSRF w ukrytym polu. Możesz także ręcznie dodać token CSRF za pomocą funkcji get_csrf_token_name() i get_csrf_hash() . Jak sugerują ich nazwy, funkcja get_csrf_token_name() zwróci nazwę tokenu CSRF, a get_csrf_hash() zwróci skrót.

Token CSRF można zregenerować za każdym razem, aby go przesłać, lub możesz zachować go tak samo przez cały okres istnienia pliku cookie CSRF. Ustawienie opcji konfiguracyjnej „csrf_regenerate” wymusi regenerację tokena, jak pokazano poniżej.

$config['csrf_regenerate'] = TRUE;

Możesz dodać adresy URL z białej listy do ochrony CSRF, ustawiając dla nich dopasowania w tablicy konfiguracji za pomocą klucza „csrf_exclude_uris”, jak pokazano poniżej. Możesz także użyć wyrażeń regularnych.

$config['csrf_exclude_uris'] = array('api/person/add');

Usuń dane o nadużyciach z danych wprowadzanych przez użytkownika

// XSS Filtering
$data = array(
             'name'=> '<script>Abuse Data</script>'
        );
$data = $this->security->xss_clean($data); // Clean Data

// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>

Zapobieganie XSS przy wprowadzaniu przez użytkownika

Nie polegaj na danych wejściowych użytkownika. użytkownik wprowadza wszystko takie jak <script> lub dowolny alert(); javascript alert(); więc musimy temu zapobiec, wszystkie dane nie będą działać w naszej przeglądarce. dlatego musimy zastosować metodę zapobiegania xss, aby ograniczyć nasze bezpieczne dane do trzymania pod ręką hakera, a także odpowiedzialność programisty za weryfikację danych wejściowych użytkownika i programowe rozwiązywanie błędów.

więc sprawdź, czy jest to przykład zapobiegania xss w CodeIgniter.

$data = array(
            'name' => "<script>alert('abc')</script>",
            'email' => "[email protected]"
        );
var_dump($data);
// Print array without xss cleaning/xss filtering

array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert

// now print data after xss filtering

$data = $this->security->xss_clean($data);
var_dump($data);

//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert

więc po dodaniu xss_filtering nie mamy problemu z uruchomieniem kodu nadużycia wprowadzonego przez użytkownika. a CodeIgniter zastąpi ten tag nadużycia słowem kluczowym [removed] .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow