| Visa föregående ämne :: Visa nästa ämne |
| Startad av: |
Meddelande |
Forge

Medlem i: 2995 dagar
Status: Offline
#645651
|
Skrivet: 2009-07-06 10:15
Ämne: SQL Injektion med MS Access databas
|
|
|
| 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 |
|
pengi


Medlem i: 2420 dagar Från: JO57XQ
Status: Offline
#645662
|
Skrivet: 2009-07-06 11:48
Ämne:
|
|
|
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 |
|
Forge

Medlem i: 2995 dagar
Status: Offline
#645678
|
Skrivet: 2009-07-06 12:38
Ämne:
|
|
|
| Fungerar detta inte i praktiken liknande som sprintf fast utan skyddet? |
|
|
|
| Till toppen på sidan |
|
pengi


Medlem i: 2420 dagar Från: JO57XQ
Status: Offline
#645681
|
Skrivet: 2009-07-06 12:43
Ämne:
|
|
|
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 |
|
|