Det jeg trenger ikke å rømme når du sender en spørring?

stemmer
18

Når du utfører en SQL-spørring, må du rengjøre strenger eller brukerne kan kjøre ondsinnet SQL på ditt nettsted.

Jeg pleier å bare ha en funksjon escape_string (blah), som:

  • Erstatter rømming ( \) med dobbelt rømming ( \\).
  • Erstatter apostrof ( ') med en rømt enkel apostrof ( \').

Er dette tilstrekkelig? Er det et hull i min kode? Er det et bibliotek som kan gjøre dette raskt og pålitelig for meg?

Jeg vil gjerne se grasiøs løsninger i Perl, Java og PHP.

Publisert på 05/08/2008 klokken 18:45
kilden bruker
På andre språk...                            


11 svar

stemmer
7

For maksimal sikkerhet, ytelse og nøyaktighet bruke preparerte uttalelser. Her er hvordan du gjør dette med mange eksempler på forskjellige språk, inkludert PHP:

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

Svarte 05/08/2008 kl. 19:38
kilden bruker

stemmer
2

Jeg vil også slippe kommentarer (dobbel bindestrek)

--
Svarte 05/08/2008 kl. 18:46
kilden bruker

stemmer
1

En flott ting å bruke i PHP er PUD . Det tar mye av gjetting ut av å håndtere sikring av SQL (og alle SQL ting generelt). Den støtter forberedt uttalelser, som går en lang vei mot å kneble SQL-injeksjon angrep.

En flott primer på PUD er inkludert i boken The PHP Anthology 101 Essential Tips, triks og Hacks av Davey Shafik etc. andre Ed . Gjør læring til en lek, og er utmerket som en referanse. Jeg trenger ikke engang å tenke på noe annet enn selve SQL Query lenger.

Svarte 05/08/2008 kl. 19:28
kilden bruker

stemmer
0

I MySQL spørring, når du bruker liker, også sørge for å unnslippe de "_" tegn som det ikke er rømt fra mysql_real_escape_string.

For referanse, sjekk her

Svarte 14/10/2008 kl. 04:57
kilden bruker

stemmer
0

Bruk preparerte uttalelser.

Svarte 16/09/2008 kl. 21:14
kilden bruker

stemmer
0

MySQL C API har sin egen mysql_escape_string(). Bruke det eller er det tilsvarende ville være best.

Svarte 14/08/2008 kl. 17:59
kilden bruker

stemmer
0

Bruk Preparerte / Parametriserte spørsmål!

Svarte 05/08/2008 kl. 19:55
kilden bruker

stemmer
0

I PHP, jeg bruker dette, og jeg vil sette pris på alle kommentarer om det:

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

Man trenger mer bekreftelse om et felt kan være 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}';
    ";

Som er det nyt! (Håper det innlegget vil korrekt sende strek og ikke & # 95;)

Svarte 05/08/2008 kl. 19:21
kilden bruker

stemmer
0

Du er bedre å bruke preparerte uttalelser med plassholdere. Bruker du PHP, .NET ... uansett, utarbeidet uttalelser vil gi mer sikkerhet, men jeg kunne gi en prøve.

Svarte 05/08/2008 kl. 18:48
kilden bruker

stemmer
0

Hvilket språk bruker? Det virker som stort sett alle av dem har innebygde SQL rømnings funksjoner som ville være bedre å bruke.

For eksempel har PHP mysql_real_escape_string og addslashes .

Svarte 05/08/2008 kl. 18:46
kilden bruker

stemmer
-1

Jeg er ikke sikker på om MySQL støtter parameteriserte spørsmål, hvis så, bør du gjøre en innsats for å gå denne ruten. Dette vil sikre at brukerne innspill kan ikke gjøre noe ondsinnet.

Ellers noen "dårlige" tegn i tillegg til det du nevnte ville være semikolon (;) og kommentarer (- og / * * /).

Svarte 05/08/2008 kl. 18:49
kilden bruker

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