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.

  1. Jeśli używam funkcji klasyActive Record W CodeIgniter, czy moje wejście jest zabezpieczone przed SQL injection?
  2. Gdzieś czytałem, że tak, ale nie rozumiem jak? albo dlaczego?
  3. czy xssclean w jakikolwiek sposób zajmuje się SQL injection?
Author: OrangeRind, 2010-09-26

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.

Czy xssclean w jakikolwiek sposób zajmuje się SQL injection?

Nie. Ma na celu HTML injection. Ale to jest gorsze niż bezwartościowe. Nigdy go nie używaj.

"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.

 16
Author: bobince,
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

 1
Author: The Surrican,
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

 1
Author: Sandy,
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