SQL Injection i Codeigniter
Pewne wątpliwości dotyczące Codeigniter i jego możliwości obsługi danych wejściowych. Niektóre mogą być trochę dziwne, ale są wątpliwości nie mniej.
- Jeśli używam funkcji klasyActive Record W CodeIgniter, czy moje wejście jest zabezpieczone przed SQL injection? Gdzieś czytałem, że tak, ale nie rozumiem jak? albo dlaczego?
- czy xssclean w jakikolwiek sposób zajmuje się SQL injection?
3 answers
Czy moje wejście jest zabezpieczone przed SQL injection?
Nie do końca 'automatycznie', ale dostarcza parametryzowanych zapytań. CodeIgniter lub no, powinieneś użyć parametryzowanych zapytań, aby w miarę możliwości odpytywać hakowanie łańcuchów.
$bof= "a'b";
$zot= 'a\b';
// Insecure! Don't do this!
//
$this->db->query("SELECT foo FROM bar WHERE bof='$bof' AND zot='$zot'");
// Secure but annoying to write
//
$this->db->query("SELECT foo FROM bar WHERE bof='".$this->db->escape($bof)."' AND zot='".$this->db->escape($zot)."'");
// This is what you want
//
$this->db->query('SELECT foo FROM bar WHERE bof=? AND zot=?', array($bof, $zot));
Uwaga to nie ma nic wspólnego z' input': gdy tworzysz zapytanie SQL z łańcuchów znaków, musisz używać parametryzacji lub ucieczki, aby je dopasować, niezależnie od tego, czy są one wprowadzane przez użytkownika, czy nie. To jest sprawa. prostej poprawności; bezpieczeństwo jest efektem ubocznym tej poprawności.
Podobnie, gdy wypisujesz tekst do HTML, musisz kodować HTML <
, &
i "
znaki w nim następnie . Absolutnie nie ma sensu próbować manipulować danymi wejściowymi, aby uciec lub usunąć znaki, które mogą być kłopotliwe w przyszłości, jeśli zdarzy ci się użyć ich bez ucieczki w SQL lub HTML. Będziesz mangle swoje wyjście przez nieoczekiwane SQL-escaping w HTML (dlatego widzisz samo-mnożenie odwrotne ukośniki w źle napisanych aplikacjach) i niechciane ucieczki HTML w SQL. A jeśli weźmiesz tekst z innego miejsca niż bezpośrednie wejście użytkownika (powiedzmy, materiał już w bazie danych), nie jesteś w ogóle chroniony.
Nie. Ma na celu HTML injection. Ale to jest gorsze niż bezwartościowe. Nigdy go nie używaj.Czy xssclean w jakikolwiek sposób zajmuje się SQL injection?
"filtrowanie XSS" jest całkowicie fałszywe (ponownie, CodeIgniter lub kogokolwiek innego). XSS musi być uniemożliwia poprawne wyjście HTML-escaping, a nie zniekształcanie wejścia. Filtrowanie XSS zapewni a nie odpowiednią ochronę, jeśli aplikacja nie jest już bezpieczna; w najlepszym wypadku zaciemni istniejące wady i da fałszywe poczucie bezpieczeństwa. Będzie to również mangle wiele ważnych danych wejściowych, które CI myśli, że wygląda jak tagi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-26 13:24:12
1.
robi, jeśli zrobisz to poprawnie
2.
prawdopodobnie zauważyłeś, że wszystkie wywołania funkcji są w taki sposób, że dane użytkownika są przekazywane w jednej zmiennej. Nie masz więc nawet możliwości przekazania kodu sterującego SQL i danych użytkownika w jednej zmiennej. Mówiąc krótko, dane są zamknięte w jednej zmiennej każda. Dlatego można go bezpiecznie zakodować bez łamania kodu SQL.
Wyjątkiem jest jednak przekazanie całego zapytania. Więc to niemożliwe.
Jeśli tak
$db->query("select * from table where password = 'hello ' or '1=1");
Nie ma sposobu, aby powiedzieć, co powinno być uciekane, a czego nie, ale jeśli zacytujesz to w taki sposób
$db->query("select * from table where password = ?",array('param1'));
Zmienna użytkownika zostanie zamknięta w jednej zmiennej i zostanie zabezpieczona.
3.
tak, ale jego podstawowym celem nie jest zapobieganie SQL injection,
wolę polegać na http://codeigniter.com/user_guide/libraries/input.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-26 17:53:30
Gdy używasz danych wejściowych generowanych przez użytkownika, przeprowadź je przez Bibliotekę wejściową, gdzie filtruje dla XSS i SQL Injection.
$this->input->post()
Http://codeigniter.com/user_guide/libraries/input.html
Sprawdź, aby uzyskać więcej informacji na temat filtrowania zabezpieczeń.
W ramach CI sprawdź plik
Codeigniter->System-libraries->input.php
Plik, w którym można znaleźć wewnętrznie funkcje używane przez CI do dezynfekcji danych.
XSS clean w zasadzie oznacza filtrowanie niechcianych Tagi XHTML / HTML
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 16:35:01