ochrana při vkládání do databáze
5 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Ahoj. Chtěl bych se zeptat, musím nějak ošetřit vstupní data, která vkládám do databáze (INSERT)?
-
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.
-
Vím, že musím ošetřovat data při SELECTu, ale u INSERTu jsem si nebyl jistý. Děkuji, Freeze, za odpověď. ;)
-
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.
-
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.