webForumDet fria alternativet

Kan man SQL-injecta detta?

4 svar · 599 visningar · startad av silo

siloMedlem sedan nov. 200177 inlägg
#1

Kan man göra farliga saker mot en sån här fråga

WHERE (Namn LIKE 'A')

I ett fält har jag skrivit A som sökord och då får jag ovanstående resultat och lägger jag till ett ' framför A i sökfältet får jag således

WHERE (Namn LIKE ''A')

Så då kan jag ju skriva typ så här i sökfältet: '); drop table tblTemp--

Fast nu är det så att när funktionen tar emot sökfältssträngen så tar den bort alla paranteser så villkoret ser ut så här

WHERE (Namn LIKE '';drop table tblTemp--')

Så då kommer ju SELECT-satsen ge ett felmeddelande. Men kan man göra några farligheter mot denna fråga på något annat sätt?

Jag jobbar på företaget där denna fråga finns så ni behöver inte vara oroliga för att jag ska göra dumma saker. (Hmm, och varför skulle ni tro på mig :q)

CompusaMedlem sedan jan. 20023 327 inlägg
#2

Jag antar att det gäller .NET?

Best-practice är att använda sig av parametriserade frågor, med hjälp av SqlParameter enligt nedan:

using System.Data;
using System.Data.SqlClient;

using (SqlConnection connection = new SqlConnection(connectionString))
{
  DataSet userDataset = new DataSet();
  SqlDataAdapter myDataAdapter = new SqlDataAdapter(
         "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", 
         connection);                
  myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11);
  myCommand.SelectCommand.Parameters["@au_id"].Value = SSN.Text;
  myDataAdapter.Fill(userDataset);
}

Gäller även för Stored Procedures. Det är inte de rena SQL-frågorna som är problemet, utan det är när du blandar in andra programmeringsspråk som sätter inparametrar etc, som det blir "farligt". Använder du dig av parameteriserade frågor så får du hjälp med att säkra dina inputparametrar med automatik.

För mer info om hur skyddar dig mot SQL-injektioner. se nedan:
http://msdn.microsoft.com/en-us/library/ff648339.aspx

siloMedlem sedan nov. 200177 inlägg
#3

Jo, det är .NET. Problemet är bara att det skulle vara ett väldigt stort arbetet att gå över till parametriserade frågor, har redan pratat om det men det går lixom inte. Det var i alla fall svaret jag fick när jag frågade för länge sedan.

CompusaMedlem sedan jan. 20023 327 inlägg
#4

Finns ju ingen genväg i det här fallet som jag ser det. Visserligen kan du ha en metod som escapar dina inparametrar åt dig, i stil med exemplet som jag länkade till tidigare men det innebär ju också en hel jobb i så fall. Gör om gör rätt, helt enkelt...

NickemannenMedlem sedan aug. 20003 575 inlägg
#5

Som Compusa säger så är det en säkerhetsfråga. Den bör ju vara extremt högt prioriterad.

O/R Mappers sköter oftast sådana saker åt dig med.

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