SQL Server på svenska
En svensk blogg om SQL Server, skriven på svenska. Kodexempel, fördjupningar och reflexioner på vad som händer i SQL Server-världen


.NET (1) BLOB (1) Bloggen (2) DBA (2) Design (1) Felhantering (1) Installation (1) Optimering (4) Säkerhet (1) SQL Server 2000 (2) SQL Server 2005 (2) SQL Server 2008 (1)


 Thursday, April 10, 2008
« Försök och fånga | Main | Installation av SQL Server 2005 hän... »
Undvik SQL Injection med parametriserade frågor!

När du programmerar mot en databas ifrån .NET - undvik att skicka in parametrar i koden på det här viset:

Dim s As String = TextBox1.Text
Dim cmd As New SqlClient.SqlCommand("SELECT * FROM tabell WHERE kolumn='" & s & "'", cn)
Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()

Det kan nämligen leda till SQL Injection. Vad det innebär? Jo, att en illvillig användare anropar din sida med skadlig SQL-kod, genom att i TextBox1 skriva in SQL-kommandon. Tänk dig att en användare skriver in följande i TextBox1:

'; DROP DATABASE minDatabas;SELECT 'You suck!

Vad skulle hända då? Jo, det som skulle hända är att det du egentligen vill göra - nämligen att välja från tabellen "tabell" körs, med en tom sträng som WHERE-villkor för kolumnen "kolumn". Därefter skulle kommandot "DROP DATABASE minDatabas" köras, dvs databasen minDatabas skulle tas bort ifrån SQL Server. Slutligen skulle kommandot "SELECT 'You suck!'" köras. Och det är ju INTE vad vi vill ska hända...

Det absolut enklaste sättet att undvika SQL Injection är att använda parmeteriserade frågor. Såhär kan det se ut:

Dim s As String = TextBox1.Text
Dim cmd As New SqlClient.SqlCommand("SELECT * FROM tabell WHERE kolumn = @kolumn", cn)
cmd.Parameters.Add(New SqlClient.SqlParameter("@kolumn", s))
Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader() 

Ytterligare en kodrad, och BETYDLIGT säkrare kod. ADO.NET tar hand om att parametern som jag skickar in omvandlas på ett sådant sätt att den är säker för SQL Server att ta emot. Ingen SQL Injection alltså.

Hade IDG förstått vikten av att använda parametrar i sin kod hade DET HÄR aldrig hänt :)

Intressant?
Andra bloggar om SQL Server, SQL Injection, Säkerhet, Datorsäkerhet

Comments [0]   Kategorier: Säkerhet

Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, strike) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview

Top Datorer bloggar
Bloggar.Topplista.se - topplistan med de b�sta bloggarna - l�gg till din blogg du ocks�!
BlogRankers.com
Bloggtoppen.se
Datorer
BloggRegistret.se




Total Posts: 14
This Year: 2
This Month: 0
This Week: 0
Comments: 65