qualitum logo
SQL Injektion med MS Access databas

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Forge



Medlem i: 2995 dagar

Status: Offline



#645651
Inlägg Skrivet: 2009-07-06 10:15      Ämne: SQL Injektion med MS Access databas Citera

Använder mig av odbc för att kommunicera med en ms-access databas och jag undrar hur jag skall skydda mig mot sql injections på ett enkelt sätt (liknade mysql_real_escape_string()) eller blir det att kolla igenom noga med reguljära uttryck osv.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
pengi
Ex-Moderator



Medlem i: 2420 dagar
Från: JO57XQ
Status: Offline



#645662
Inlägget är accepterad som det rätta svaret Skrivet: 2009-07-06 11:48      Ämne: Citera

Förutsatt att jag inte har missat något och att det är det här du använder dig av så är det på ett annat sätt, som är snyggare, du får göra:
http://se2.php.net/manual/en/book.uodbc.php

Det är nämligen det sätt som bl.a. PDO använder, vilket är prepared statements.

Den här sidan beskriver ganska bra:
http://se2.php.net/manual/en/function.odbc-prepare.php
http://se2.php.net/manual/en/function.odbc-execute.php

I queryn lägger du alltså aldrig in dina variabler, utan bara placeholders, dvs. en markör för var din variabel ska in.

När du sedan kör queryn så stoppar du in dina variabler i execute-funktionen, som då kommer att escapea på lämpligt sätt, sluta in i ' om det är strängar osv. Sedan byter den ut alla ?.

På detta sätt så kommer du aldrig att missa att escapea något, så länge du bara har konstanta mallar för dina querys.
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Forge



Medlem i: 2995 dagar

Status: Offline



#645678
Inlägg Skrivet: 2009-07-06 12:38      Ämne: Citera

Fungerar detta inte i praktiken liknande som sprintf fast utan skyddet?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
pengi
Ex-Moderator



Medlem i: 2420 dagar
Från: JO57XQ
Status: Offline



#645681
Inlägget är accepterad som det rätta svaret Skrivet: 2009-07-06 12:43      Ämne: Citera

mjaeo. Konceptet att lägga markörer i en sträng som sedan byts ut till argumenten efteråt är lika, men det finns stora betydande skillnader.

om man skriver ett statement t.ex.
"INSERT INTO tabell (intkolumn, strangkolumn) VALUES (?,?)"

exekverar med argumenten:
array( 323, "kalle'" )

så kommer den att formatera innan. integern känner den av, så den gör den inte något med (mer än konvertera till sträng), men strängen kommer den att escapea och kapsla in:
"INSERT INTO tabell (intkolumn, strangkolumn) VALUES (323,'kalle\'')"
(ungefär så)

Så att tänka som sprintf är farligt, för risken är då att man får för sig att skriva ...VALUES (?, "?") för att det är en sträng, men det är tokfel.

Men visst, det är ganska lika.
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo