webForumDet fria alternativet

Skydda sina script mot SQL Injections

12 svar · 619 visningar · startad av Klingstedt

KlingstedtMedlem sedan okt. 200145 inlägg
#1
SebbeMedlem sedan jan. 20032 285 inlägg
#2

Byt ut alla ' mot '', gärna med en funktion:

Function SQLSafe(str)
  str = Replace(str, "'", "''")
  SQLSafe = str
End Function

strNamn = SQLSafe(Request.Form("namn"))
'O.s.v...
KlingstedtMedlem sedan okt. 200145 inlägg
#3

Tackar, fungerar utmärkt.

Inga andra tecken som är bra att skydda emot för större säkerhet?

SebbeMedlem sedan jan. 20032 285 inlägg
#4

Klingstedt skrev:

Tackar, fungerar utmärkt.

Inga andra tecken som är bra att skydda emot för större säkerhet?

Nej, det ska räcka med '.

M.CheraghiMedlem sedan juli 20015 107 inlägg
#5

Nu när tråden finns uppe :P så tänkte jag fråga vad det är som är så farligt om man inte spärrar mot sånt? :o det enda är juhe felmeddelande i form av

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''talala ' talalaaa, '2004-02-16 14:01', 1038, '194.237.241.xx')'.

/comx/forum/new_post.asp, line 48

Nån vänlig själ som kan förklara närmare med riskerna!

@ndersMedlem sedan juni 200032 969 inlägg
#6

http://www.webforum.nu/showthread.php?s=&forumid=94&threadid=90222

Du kan nog söka lite mer på just 'injections' för att få mer info om detta.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7
  1. Du exponerar eventuellt tabellnamn, kolumnnamn och data som finns i databasen för de som inte skall se den
  2. I t.ex. SQLServer kan man använda ' för att göra mer än bara visa felmeddelanden, t.ex. radera tabeller, ändra data, visa data osv, eftersom du kan lägga flera olika typer av statements efter varandra
ampyMedlem sedan feb. 20011 498 inlägg
#8

Om du använder MySQL som DBMS så bör du se till att strängen du ska mata in i databasen inte avslutas med ett \ (backslash). Då returneras ett felmeddelande på sql-frågan.

Vet dock inte hur det är med andra DBMS:er.

bassebhuMedlem sedan nov. 20016 480 inlägg
#9

När vi är inne på ämnet: Behöver man byta ' mot '' när man lagrar data med t ex RecSet.Add i stället för INSERT? Vid INSERT får man väl fel om man skriver in ', det får man ju inte vid Add. Borde ju även betyda att man inte behöver en replace med Add.

Om det metoden är att föredra är en annan fråga. Med RecSet.Open Connect, SQL, 3,3

Vad har ni för fundelationer i ämnesomsättningen? :)

nikoMedlem sedan juni 20022 599 inlägg
#10

Vad har ni för fundelationer i ämnesomsättningen?

Ja, det är ju korrekt som du säger. Hela finessen med ADO-funktionerna är att isolera användaren från att behöva veta vilken databas som finns i botten och hantera escapning, typkonvertering och syntaxskillnader automatiskt.

Använder man explicita SQL:er så blir priset att man får göra såna saker själv och får kod som blir mindre flyttbar (vid byte av databas) och (eventuellt) osäkrare.

GladhMedlem sedan maj 20012 812 inlägg
#11

Riktigt illa blir det om man inte har satt rätt rättigheter på sin databas, då kan man från MS SQL Server med hjälp av Injections, skapa en ny användare och ge den användaren administratör behörigheter.

Efter det så står din SQL Server vidöppen för personen att logga in och göra vad han vill.

- M

KlingstedtMedlem sedan okt. 200145 inlägg
#12

http://www.sitepoint.com/article/794 hittade jag på nätet om detta..

Alla som håller på med databaser och webben borde läsa den guiden, om man inte redan läst den eller tillämpat allt som står.

Går även att styra en hel server med hjälp av SQL Injections om man har IIS. Riktigt äckligt!

Engine^Medlem sedan dec. 20003 887 inlägg
#13

Klingstedt skrev:

http://www.sitepoint.com/article/794 hittade jag på nätet om detta..

Alla som håller på med databaser och webben borde läsa den guiden, om man inte redan läst den eller tillämpat allt som står.

Går även att styra en hel server med hjälp av SQL Injections om man har IIS. Riktigt äckligt!

Det där var en mycket bra artikel. Och jag håller med dig Klingstedt - kör man webbserver ska man läsa den artikeln. Oavsett hur mycket man tror att man vet.

Kan man redan allting så 'mm'-ar man en hel del.
Kan man inte allt så blir man säkert paranoid och spärrar sönder servern först och öppnar lite försiktigt här och var.

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)