01. januar 2004 - 23:07Der er
24 kommentarer og 2 løsninger
Injection attacks
Er "nemt" spørgsmål:
Hvordan sikrer man sig mod injection attacks??
Umiddelbart er det jo simpelt nok at lave så mange kontroller at der ikke slipper noget igennem, men det er håbløs, hvis der er mange felter at validere....
Hvad kan man gøre, hvis man i princippet er total ligeglad med hvad brugeren indtaster i et felt, og værdien skal kyles i databasen som det er?
... og skal der gøres noget specielt når man hiver data'ene ud igen?
Jeg har læst artiklen her: http://www.sitepoint.com/article/794/1 ...men synes ikke den giver nogle brugbare forslag til hvordan man kan forhindre injection attacks, uden at kode sig ihjel.....
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
1) Når du skriver en query, skal du bruge ' ' om værdien:
Mindre godt: mysql_query("DELETE FROM users WHERE id = ".$id)
Godt: mysql_query("DELETE FROM users WHERE id = '".$id."'");
2) Alt input skal escapes dvs. karakterer som ' " skal der sættes en \ foran. Dette gør PHP automatisk med input fra post, get, cookies hvis værdien af 'magic_quotes_gpc' er sand i php.ini. Dette er den normalt, men du bør kontrollere dette i dit script (med eksempelvis ini_get), hvis du satser på denne mekanisme. Alternativt kan du gøre det manuelt med addslashes() funktionen.
Så skal SQL injections ikke forekomme.
Endvidere bør du, som du selv er inde på, altid validere gyldigheden af data. Dette har som sådan ikke noget med sql injections at gøre, men sikrer konsistens i din database udfra regler, du selv opstiller.
Synes godt om
Slettet bruger
01. januar 2004 - 23:15#4
"Så skal SQL injections ikke forekomme" = "Så kan SQL injections ikke forekomme"
Synes godt om
Slettet bruger
01. januar 2004 - 23:16#5
Og nej, du skal ikke gøre noget, når du hiver da ud af databasen igen.
mercur8's virker ligeså godt. men derfor er vi alligevel død-ueninge. Jeg synes det er 'syndigt' at bruge mySQL's streng-til-tal konvertering til noget den ikke er beregnet til.
Synes godt om
Slettet bruger
01. januar 2004 - 23:21#8
googolplex & mercur8....> Så blev jeg lidt klogere. Lige for at sikre mig at jeg har forstået det hele rigtigt. Såfremt min udbyder ikke har 'magic_quotes_gpc' slået til, bruger jeg addslashes, stripslashes og '' uden om mine værdier i en query. Ellers kan jeg "nøjes" med at bruge '' uden om mine værdier?
jakoba....> Hvis jeg har et felt hvor der skrives et referat, vil det da være et større arbejde at sikre sig, hvis altså det skal ske ved hjælp at validering??
Synes godt om
Slettet bruger
01. januar 2004 - 23:30#9
jakoba: Åh nej, nu ikke igen :) Jeg siger jo HVER GANG, at man OGSÅ skal validere sit input. Livrem og seler. Og gør du iøvrigt ikke de ting (2), jeg nævner får du (uanfægtet validering) fejl, hvis du indsætter en streng, der indeholder '.
googoplex: Hvis 'magic_quotes_gpc' ikke er slået til, skal du anvende addslashes når du indsætter og stripslashes når du skriver ud.
hvis feltet er tekst skal der aæigeveæ '-er om for at SQL kan se at det er en streng. Der er der kun risiko fo injection hvis du gemmer værdien i en .php fil, ikke hvis du gemmer den i en database.
The OWASP Guide to Building Secure Web Application and Web Services has become staple diet for many web security professionals over the last 18 months the initial version 1.0 has now been downloaded over 2 million times. It forms the basis for corporate web security policies for several Fortune 500 companies.
The Guide is a aimed at architects, developers and auditors and is a comprehensive manual for designing, developing and deploying secure web applications.
Synes godt om
Slettet bruger
01. januar 2004 - 23:37#14
jakoba skrev: "hvis feltet er tekst skal der aæigeveæ '-er om for at SQL kan se at det er en streng. Der er der kun risiko fo injection hvis du gemmer værdien i en .php fil, ikke hvis du gemmer den i en database."
Tror ikke jeg forstår hvad du mener. Hvis jeg har:
$streng = "davs' du";
mysql_query("INSERT INTO foo SET streng = '".$string."'");
Indtaster jeg "søren's" og submitter formen, ville der blive skrevet "Søren\'s" tilbage ud i formen. Derfor stripslashes her. Og for at være helt godt burde udskriften gøres som <?= htmlentities(stripslashes($_POST['foo']), ENT_QUOTES); ?>. Men nok om det.
Din my_stripslashes er i den sammenhæng vi diskturer ikke nødvendig. my_addslashes er god.
Synes godt om
Slettet bruger
02. januar 2004 - 00:26#20
Når du indsætter med \ foran specialtegn, bliver disse \ ikke indsat i selve databasen. Derfor behøver du ikke fjerne dem igen med stripslashes.
Rettelse: Så skal jeg kun bruge stripslashes på en streng jeg lige har brugt addslashes på og derefter vil udskrive? Ikke til database udtræk fra en db?
Synes godt om
Slettet bruger
02. januar 2004 - 00:29#24
"Så skal jeg kun bruge dem på noget jeg lige har brugt addslashes på (el. 'magic_quotes_gpc' er aktiveret), og derefter vil udskrive, men ikke til database udtræk ?"
Ja.
Synes godt om
Slettet bruger
02. januar 2004 - 00:29#25
Ja :)
Synes godt om
Slettet bruger
02. januar 2004 - 11:51#26
Hmmmm.... blev en smule klogere.....
Indtil videre får i pointene... kommer der guldkorn fra andre, så kan der hurtigt komme flere point på bordet....
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.