 |
|
Autor: Magnus (middleage.xf.cz)
Datum: 15. 12. 2011 21:13
Ahoj.
Chtěl bych se zeptat, musím nějak ošetřit vstupní data, která vkládám do databáze (INSERT)?
|
|
| Reagovat
|
|
Autor: Freeze (dreamer.kvalitne.cz)
Datum: 15. 12. 2011 22:22
Záleží na datech. Obecně ano.
Pro celá čísla intval(), pro texty (a databáze MySQL) mysql_real_escape_string(), atd. Číselný intval() má ale samozřejmě potenciální nevýhodu, že může data změnit (tzn. některé chyby se hůř hledají).
___
Co si pamatuju, pro sqlite existoval ekvivalent mysql_real_escape_string(), jak přesně se volal/jmenoval nevím.
|
|
| Reagovat
|
|
Autor: Magnus (middleage.xf.cz)
Datum: 15. 12. 2011 22:28
Vím, že musím ošetřovat data při SELECTu, ale u INSERTu jsem si nebyl jistý. Děkuji, Freeze, za odpověď. ;)
|
|
| Reagovat
|
|
Autor: Freeze (dreamer.kvalitne.cz)
Datum: 15. 12. 2011 23:19
Princip SQL injection nespočívá v tom, o jaký typ dotazu se jedná ;)
___
Mimochodem v PHP je nebezpečí SQL injection trochu limitované ze strany funkcí pro obsluhu MySQL. Klasické SQL injection lze využít k provedení více dotazů najednou (ukončení prvního a přidání následujících, např.: "; DROP TABLE tabulka;--). Vestavěné databázové funkce v PHP však mají vnitřní omezení pouze na jeden dotaz a další ignorují (v případě s DROP TABLE by se žádné smazaní neprovedlo). Přesto je nutné data kontrolovat (protože ani toto "omezení" nezabrání modifikaci toho první dotazu, který se opravdu provede). To tak pro informaci.
|
|
| Reagovat
|
|
Autor: Kit (ekobrikety.vyrobce.cz)
Datum: 15. 12. 2011 23:29
SQL injection se dá bránit i používáním tzv. parametrizovyných dotazů. Ovladač MySQL je bohužel neumí, ale MySQLi a PDO je už umí. Vstupy pak není nutné nijak ošetřovat.
|
|
| Reagovat
|
|
 |
 |