Vra

As jy 'n SQL navraag uit te voer, moet jy jou snare of gebruikers skoon kan kwaadwillige SQL te voer op jou webwerf.

Ek gewoonlik net 'n funksie escape_string (blah), wat:

  • Vervang ontsnappings (\) met 'n dubbele ontsnappings (\\).
  • Vervang enkele aanhalingstekens (') met 'n ontsnapte enkele aanhaling (\').

Is dit voldoende? Is daar 'n gat in my kode? Is daar 'n biblioteek wat dit vinnig en betroubaar kan doen vir my?

Ek wil graag grasieuse oplossings in Perl, Java, en PHP sien.

Was dit nuttig?

Oplossing

Vir maksimum sekuriteit, prestasie, en korrektheid gebruik voorberei state. Hier is hoe om dit te doen met baie van die voorbeelde in verskillende tale, insluitend PHP:

https://stackoverflow.com/questions / 1973 / wat-is-die-beste-way-to-vermy-sql-inspuiting-aanvalle

Ander wenke

Ek sou ook ontsnap kommentaar (dubbel stamp)

--

'n groot ding om te gebruik in PHP is die BOB . Dit neem baie van die raaiwerk uit van die hantering van die beveiliging van jou SQL (en al jou SQL dinge in die algemeen). Dit word ondersteun deur voorbereide state, wat 'n lang pad na die thwarting SQL-inspuiting aanvalle.

'n groot primer op BOB is ingesluit in die boek Die PHP Anthology 101 Essential wenke, truuks & Hacks deur Davey Shafik ens 2 Ed . Maak leer 'n briesie en is uitstekend as 'n verwysing. Ek hoef nie eens te meer dink oor enigiets anders as die werklike SQL Query.

Watter taal gebruik? Dit lyk asof pretty much almal van hulle het 'n ingeboude SQL ontsnapping funksies wat beter sou wees om te gebruik.

Byvoorbeeld, PHP het mysql_real_escape_string en lashes .

Jy is beter af met behulp van voorbereide state met plekhouers. Is jy met behulp van PHP, NET ... In ieder geval, voorberei state sal meer sekuriteit te verskaf, maar ek kon nie 'n monster te voorsien.

In PHP, ek gebruik hierdie een en ek sal elke kommentaar daaroor waardeer:

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}; 
";

moet 'n mens meer verifikasie as 'n veld NULL kan wees:

$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}';
    ";

Dit is dit geniet! (Hoop die post sal korrek onderstreping stuur en nie dat & # 95;)

Gebruik Voorbereide / Geparametriseerde navrae!

Gebruik voorberei state.

In MySQL navraag, by die gebruik van wil, ook seker maak om die "_" karakters te ontsnap as dit nie ontsnap deur mysql_real_escape_string.

Vir verwysing, kyk hier

Die MySQL C API het sy eie mysql_escape_string(). Deur dit te gebruik of dit gelyk sou die beste wees.

Ek is nie seker of MySql ondersteun parameters navrae, indien wel, moet jy 'n poging om hierdie roete te gaan maak. Dit sal verseker dat die gebruikers insette kan niks kwaadwillige doen.

Anders sommige "slegte" karakters in bykomend tot dit wat jy genoem sou word kommapunt (;) en kommentaar (- en / * * /)

.
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top