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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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.