Co je potřeba, aby se vyhnuli při odesílání dotazu?

hlasů
18

Při spuštění dotazu SQL, budete muset čistit struny nebo uživatelé mohou spustit škodlivý SQL na svých webových stránkách.

I obvykle jen mají funkci escape_string (bla), která:

  • Nahrazuje escape ( \) s dvojitými úniky ( \\).
  • Nahradí apostrofy ( ') s uprchlým jediného citátu ( \').

Je to adekvátní? Je tam díra v mém kódu? Je tam knihovna, která lze provést rychle a spolehlivě pro mě?

Já bych si přál, aby ladné řešení v Perl, Java a PHP.

Položena 05/08/2008 v 19:45
zdroj uživatelem
V jiných jazycích...                            


11 odpovědí

hlasů
7

Pro maximální bezpečnost, výkon a správnost použití připravené prohlášení. Zde je návod, jak to udělat s množstvím příkladů v různých jazycích, včetně PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Odpovězeno 05/08/2008 v 20:38
zdroj uživatelem

hlasů
2

Také bych uniknout komentáře (double čárek)

--
Odpovězeno 05/08/2008 v 19:46
zdroj uživatelem

hlasů
1

Skvělá věc pro použití v PHP je PDO . To trvá hodně dohady z jednání s zabezpečení vašeho SQL (a všechny své věci SQL obecně). Podporuje připravené prohlášení, které jdou dlouhou cestu k zamezení SQL injection útoky.

Velkou primer na CHOP je obsažen v knize The PHP Anthology 101 Základní Tipy, triky & Hacky od Davey Shafik atd. 2. vyd . Dělá učení hračkou a je vynikající jako reference. Nemám ani přemýšlet o ničem jiném, než je skutečná dotazu SQL už ne.

Odpovězeno 05/08/2008 v 20:28
zdroj uživatelem

hlasů
0

V MySQL dotazu při použití LIKE, se ujistit, aby se vyhnuli „“ znaky, protože není unikl mysql_real_escape_string.

Pro srovnání, zkontrolujte zde

Odpovězeno 14/10/2008 v 05:57
zdroj uživatelem

hlasů
0

Použijte připravené prohlášení.

Odpovězeno 16/09/2008 v 22:14
zdroj uživatelem

hlasů
0

API MySQL C má své vlastní mysql_escape_string(). Jeho použití, nebo je to ekvivalent by bylo nejlepší.

Odpovězeno 14/08/2008 v 18:59
zdroj uživatelem

hlasů
0

Použijte Připravená / parametrické dotazy!

Odpovězeno 05/08/2008 v 20:55
zdroj uživatelem

hlasů
0

V PHP, já používám tenhle a já oceňuji každou poznámku o tom:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

Potřebuje ještě jednu kontrolu, zda pole může být NULL:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

A je to baví! (Doufám, že příspěvek bude správně posílat podtržítka a ne & # 95;)

Odpovězeno 05/08/2008 v 20:21
zdroj uživatelem

hlasů
0

Jsi lepší vypnout pomocí připravené prohlášení se zástupnými znaky. Používáte PHP, .NET ... Ať tak či onak, připravené prohlášení zajistí větší bezpečnost, ale jsem mohl poskytnout vzorek.

Odpovězeno 05/08/2008 v 19:48
zdroj uživatelem

hlasů
0

Jazyk, který používáte? Vypadá to, že skoro všichni z nich mají vestavěné SQL únikových funkcí, které by bylo lepší použít.

Například PHP má mysql_real_escape_string a addslashes .

Odpovězeno 05/08/2008 v 19:46
zdroj uživatelem

hlasů
-1

Nejsem si jistý, jestli MySQL podporuje parametrizované dotazy, a pokud ano, měli byste se snažit jít touto cestou. Tím bude zajištěno, vstup uživatelé nemohou dělat nic škodlivého.

Jinak by některé „špatné“ charaktery navíc k tomu, co jste zmínil, bude středník (;) a komentáře (- a / * * /).

Odpovězeno 05/08/2008 v 19:49
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more