23. september 2004 - 22:01
Der er
16 kommentarer og 3 løsninger
sikkerhed mod hackere
Når jeg nu smider min webapp på nettet hvordan sikrer jeg mig så imod utilsigtet brug. Det jeg tænker på er gode råd, i stil med at replace ' i password og lign. Nogle der har nogle ting man bør sikre sig?
Annonceindlæg fra Computerworld
23. september 2004 - 22:03
#1
SQL injection undgår du ved at bruge Parameters i dine SQL XxxxCommand's
23. september 2004 - 22:04
#2
23. september 2004 - 22:23
#3
Bogen ser spændende ud, men skyder nok også en del over mål i forhold til hvad jeg har brug for. Men skal da læses. Hvordan bruger jeg parametre i min sql ? Handler det om også at bruge stored procedures?
23. september 2004 - 22:24
#4
Nej du kan også bruge det til helt almindelige SQL SELECT og INSERT. Vil du have et C# eller VB.NET eksempel ?
23. september 2004 - 22:25
#5
23. september 2004 - 22:25
#6
Er C# SQLServer INSERT eksempel: SqlCommand ins = new SqlCommand("INSERT INTO imgtest VALUES(@id,@img)", con); ins.Parameters.Add("@id", SqlDbType.Int); ins.Parameters.Add("@img", SqlDbType.Image); ins.Parameters["@id"].Value = 1; ins.Parameters["@img"].Value = imgdata; ins.ExecuteNonQuery();
23. september 2004 - 22:43
#7
Ok, hvad er det lige de parametre gør? Skal der f.eks. være 2 linjer for hver værdi jeg sætter ind? så bliver det jo helt uoverskueligt, og jeg vil jo egentlig gerne gøre sådan; SqlCommand ins = new SqlCommand( sqlStreng, con); Kan det lade sig gøre?
23. september 2004 - 22:47
#9
Det fungerer ved at du i din SQL streng sætter plads af til dine parametre, definerer parameternes typer og så indsætter værdier. Pointen er at det håndterer alle problemer med single quotes i data, hvad enten det er O'Toole der er uheldig eller en ondsindet hacker. Du kan sagtens bruge en sqlStreng variabel. Men parameterne skal stadigvæk tilføjes.
23. september 2004 - 22:50
#10
Det betyder vel så at jeg ikke kan bruge den samme metode til flere forskellige indsættelser i databasen ... ?
23. september 2004 - 22:52
#11
Jo. Dem her udføres kun en gang: SqlCommand ins = new SqlCommand("INSERT INTO imgtest VALUES(@id,@img)", con); ins.Parameters.Add("@id", SqlDbType.Int); ins.Parameters.Add("@img", SqlDbType.Image); Dem her udføres for hver indsættelse: ins.Parameters["@id"].Value = i; ins.Parameters["@img"].Value = imgdata; ins.ExecuteNonQuery();
23. september 2004 - 22:57
#12
En metode der bare tager en sqlstreng som input og smider det i databasen uanset hvor mange felter den berører er ikke mulig?
23. september 2004 - 22:59
#13
Du kan sagtens undlade at bruge parametre og bare have en SQL streng uden videre. Men så skal du selv gøre noget for at undgå problemer med single quotes i input. Hvadenten det er O'Toole eller en hacker som forsøger SQL injection.
23. september 2004 - 23:00
#14
og et svar fra mig
24. september 2004 - 08:38
#15
hvis nu jeg vil lave det med alm sql strenge, hvordan replacer jeg så "hacker '" og ikke O'toole ?
24. september 2004 - 09:26
#16
Du erstatter en enkelt ' med to altså ''. sqlstr.Replace("'","''") Men hvis I er sikkerheds fokuserede og har en skrap tech lead, så får du den ikke gennem code review.
24. september 2004 - 09:40
#17
Hvis du sidder med en komplet SQL streng som f.eks: SELECT * FROM table WHERE column1 = 'O'toole' vil det ikke virke blot at escape, du bliver nødt til at evaluere hver parameter for sig selv.
24. september 2004 - 09:46
#18
Ja det var noget vrøvl. Det skal være: sqlstr = "SELECT * FROM table WHERE column1 = '" + navn.Replace("'","''") + "'";
28. september 2004 - 22:19
#19
Tak for hjælpen alle sammen :o)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.