Avatar billede eqvaliser Nybegynder
17. maj 2008 - 13:58 Der er 13 kommentarer og
1 løsning

hvordan beskytter man sig imod injections.

Efter alle disse angreb osv på dansk ejede sider m.m.
hvor der bruges SQL injections. hvordan beskytter jeg
mine sql sætninger imod disse angreb  ? 

eller bør man skifte tilbage til den gammeldags acces db
eller giver det bare en gammeldags falsk tryghed :)

Martin.
Avatar billede blackscorpion Nybegynder
17. maj 2008 - 14:00 #1
du kan bla. google "sql injection"

jeg bruger bla: htmlspecialchars() rundt om de ting folk kan inputte, som skal bruge databasen.

den laver bla. ' og " om til deres hexværdig tror jeg det heller.. altså html koden for tegnet. ;)
Avatar billede keysersoze Guru
17. maj 2008 - 14:06 #2
access er lige så såbar som enhver anden database over for sql injection - det er som sådan ikke databasen der er problemet med sql injections, det er (som navnet siger) et problem forbundet direkte med sql statements.

Det er generelt en dårlig idé at benytte htmlspecialchars eller hexværdier som foreslået oven over - for den dag dataene pludselig skal vises i et andet miljø som ikke forstår fx html værdier har vi ubrugelige data medmindre de bearbejdes før de vises. Alt du behøver er at escape ' tegnet - i ASP kunne de se sådan ud;

SQL = "INSERT INTO tabel (kolonne) VALUES ('" & Replace(VARIABEL,"'","''") & "')"
Avatar billede blackscorpion Nybegynder
17. maj 2008 - 14:08 #3
nu har det så også kun en nem løsning til php. ;)
Avatar billede erikjacobsen Ekspert
17. maj 2008 - 14:17 #4
Der er en nem løsning til php5: mysqli og brug af parameters.
Avatar billede smitten1 Nybegynder
17. maj 2008 - 14:26 #5
Apostrofferne er vel også kun en lille del af problemet. Andre felttyper skal bruge andre former for validering. Og afhængigt af tegntabel, er ' til '' heller ikke sikker.
Avatar billede eqvaliser Nybegynder
17. maj 2008 - 14:28 #6
det var da utroligt er apostrofferne nok ?
Avatar billede erikjacobsen Ekspert
17. maj 2008 - 15:39 #7
Nu skal vi vist lige også advare en gang til mod htmlspecialchars. Som allerede anført er det en dum idé at lave om til noget andet i forbindelse med opbevaring - det opdager man den dag man skal bruge det til noget andet. Og så er der jo også noget med at længden af strengen der opbevares ikke er den samme, som den der indtastes. Opbevar det så tæt på det oprindelige format som muligt.

Men påstanden om at ' bliver lavet om skal altså lige imødegås fra min side, så der ikke er nogen, der "falder i" ved at bruge det "gode råd". Denne stump

    $s = htmlspecialchars("Hej'sa");
    if ($s == "Hej'sa") {
    print "Der skete ikke noget<br>";
    }
    print $s;

udskriver: "Der skete ikke noget<br>". Altså ingen beskyttelse mod sqlinjections.

Man kan selvfølgelig læse på http://php.net/specialchars og se at man godt kan få '-en erstattet:

  $s = htmlspecialchars("Hej'sa",ENT_QUOTES);

Hvorefter $s vil indeholde: Hej&#039;sa

Det er jo sikkert nok, men har som sagt andre problemer.
Avatar billede blackscorpion Nybegynder
17. maj 2008 - 16:06 #8
jamen hvad ville så være den bedste løsning mod mysql injection ?
jeg syntes jeg så på et tidspunkt et php tag der gik ind og modkæmpede, netop det problem.
Avatar billede blackscorpion Nybegynder
17. maj 2008 - 16:21 #9
Tror lidt det nok er denne her jeg har tænkt på:
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
http://dk2.php.net/manual/en/function.mysql-real-escape-string.php
Avatar billede erikjacobsen Ekspert
17. maj 2008 - 17:13 #10
Løsningen er sådan set allerede givet: mysqli og brug af parameters.
Avatar billede eqvaliser Nybegynder
17. maj 2008 - 18:22 #11
vil undersøge det med '' mere..  det er selvfølgelig en fejl jeg
ikke fortalte hvilket sprog jeg bruger.. 

men 9/10 gange asp og alle mine statements er i asp eller vb-script.
sidder lige og kigger en wiki igennem også.. http://en.wikipedia.org/wiki/SQL_injection

også skibber jeg den med htmlspecialchars.
tak for svarende,  og det ser ud til det er en debat
som er lidt uklar, eller bare har mange forskellige holdninger.
Avatar billede erikjacobsen Ekspert
17. maj 2008 - 20:21 #12
asp understøtter sådan set også parameters

Egentlig burde man forbyde kode uden ...
Avatar billede blackscorpion Nybegynder
17. maj 2008 - 20:48 #13
erik, er det muligt at få et eksempel på banen ? evt i php, har kigget lidt på funktionen på php.net, men syntes det virker rimeligt uoverskueligt. :S
Avatar billede arne_v Ekspert
17. maj 2008 - 21:03 #14
Eksemplerne på http://www.php.net/manual/en/mysqli.prepare.php er da rimeligt simple.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester