---
title: "säkra uppemot sql-injections?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/176492-säkra-uppemot-sql-injections"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "timedia"
published: "2009-01-24T14:08:16.000Z"
updated: "2009-01-24T21:15:53.000Z"
replies: 7
views: 517
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/176492-säkra-uppemot-sql-injections"
---

# säkra uppemot sql-injections?

## #1 — timedia, 2009-01-24T14:08Z

Man kan idag ge eget betyg på en film. Hur säkrar jag upp denna kod emot sql-injects? Betyget baseras på terningen, 1 - 6 i heltal.

```
<%
	Set RecSet = Server.CreateObject("ADODB.Recordset")
   Uppdatera = "SELECT * FROM Recension WHERE ID = " & Request.Form("AD") & " "

   zeroval = Request.Form("R1")

  If zeroval = 0 Then
Response.Write "Ogiltig röst."
   
   Else

   RecSet.Open Uppdatera, Connect, adOpenStatic, adLockOptimistic 
   
	RecSet("Addvote") = Request.Form("R1") + RecSet("Addvote")
	RecSet("Votes") = RecSet("Votes") + 1

	RecSet.Update
	RecSet.Close
	Connect.Close

Response.Cookies("Moviebetyg") = Request.Form("AD")
Response.Cookies("Moviebetyg").Expires = Date+1
Response.Cookies("Moviebetyg").Domain = ".www.moviemix.nu"

	
Response.Write "<b>Tack!</b><br>"
Response.Write "<scr" & "ipt>self.close();</scr" & "ipt>"
	
	End If
End If
%>
```

Permalänk: https://www.webforum.nu/p/176492

## #2 — Ledel, 2009-01-24T14:11Z

Uppdatera = "SELECT \* FROM Recension WHERE ID = " & Request.Form("AD") & " "

Eftersom att AD är ett heltal så bör du anropa CInt med AD som parameter:

Uppdatera = "SELECT \* FROM Recension WHERE ID = " & CInt(Request.Form("AD"))

Detta konverterar AD till ett heltal, och om det innehåller text ( = trolig SQL Injection) visas ett felmeddelande som säger att AD inte kunde omvandlas till ett heltal.

Permalänk: https://www.webforum.nu/p/2166412

## #3 — @nders, 2009-01-24T14:43Z

CInt är ett dåligt alternativ - gränsen för integer är väldigt låg. Använd CLng istället. 

Se också till att byta ut alla apostrofer mot två.

Permalänk: https://www.webforum.nu/p/2166417

## #4 — timedia, 2009-01-24T15:08Z

tack för tipsen!
Behöver man inte också säkra så att alla värden större än 6 och mindre än noll plockas bort? 
I dag finns filmer med betyg 0,87 - det ska ju inte vara möjligt när minsta betyget är 1.

Permalänk: https://www.webforum.nu/p/2166427

## #5 — Ledel, 2009-01-24T15:25Z

I så fall får du spara CInt(Request.Form("AD)) i en variabel och sedan kolla att värdet ligger inom de gränser du angett.

Permalänk: https://www.webforum.nu/p/2166428

## #6 — timedia, 2009-01-24T15:40Z

Kan du visa med koden?

Permalänk: https://www.webforum.nu/p/2166432

## #7 — rille77, 2009-01-24T19:31Z

Vet knappt vart jag sak börja, för det första skrota ditt recordset, när du ska göra en uppdatering så behövs det inte överhuvudtaget.
Gör det direkt i SQL istället.

```
Connect.Execute("UPDATE Recension SET Addvote = Addvote + zeroval, Votes = Votes + 1 WHERE ID = " & Request.Form("AD") & "")
```

 
Sådär nu sparade vi 7 rader kod på en gång.
zeroval används istället för Request.Form("R1") iom att du har tilldelat zeroval värdet i Request.Form("R1") tidigare, att anropa Request igen tar bara onödig kraft.

Att du får  0,87 som betyg är inte alls konstigt då man kan skicka in en 0 röst.

```
If zeroval = 0 Then
```

zeroval kommer aldrig vara = 0, du jämför nämligen 0 med "0" iom att du inte typomvandlar zeroval till ett tal.

En enkel kod för att utföra det du vill ser ut såhär, då är den även skyddad mot SQL injections.

```
<%
AdID = CLng(Request.Form("AD"))
zeroval = CLng(Request.Form("R1"))

If zeroval = 0 Then
	Response.Write "Ogiltig röst."
Else
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Execute("UPDATE Recension SET Addvote = Addvote + zeroval, Votes = Votes + 1 WHERE ID = "& AdID &"")
	Connect.Close : Set Connect = Nothing
	
	Response.Cookies("Moviebetyg") = Request.Form("AD")
	Response.Cookies("Moviebetyg").Expires = Date+1
	Response.Cookies("Moviebetyg").Domain = ".www.moviemix.nu"
	
	Response.Write "<b>Tack!</b><br>"
	Response.Write "<scr" & "ipt>self.close();</scr" & "ipt>"
End If
%>
```

Skydd mot SQL injections är beroende på databas, MySQL och Access har olika.
Ska du ha ett 100% skydd så är det parametrar som gäller.

Kort kan man säga att se alltid till att typomvandla tal och se till att din databasspecifika tecken escapas korrekt

Permalänk: https://www.webforum.nu/p/2166446

## #8 — @nders, 2009-01-24T21:15Z

Litet tillägg: zeroval måste konkateneras in i SQL-frågan.

```
	Connect.Execute("UPDATE Recension SET Addvote = Addvote + " & zeroval & ", Votes = Votes + 1 WHERE ID = "& AdID)
```

Och - det finns ingen anledning att konkatenera in en tom sträng i slutet.

Permalänk: https://www.webforum.nu/p/2166451

---

Tråden på webben: https://www.webforum.nu/amne/asp/176492-säkra-uppemot-sql-injections
