webForumDet fria alternativet

SQL Syntax

ASP

35 svar · 999 visningar · startad av Jeppeweb

Medlem sedan sep. 2006462 inlägg
Frågan#1

Vad är det för fel på den här kodsnutten?

<%
Set ObjRSGroup = ObjConn.Execute("SELECT * FROM groups WHERE id="& CLng(Request.Querystring("groupid")) &"")
Set ObjRSGrouptrad = ObjConn.Execute("SELECT * FROM group_tradar WHERE group_id="& Request.Querystring("groupid") &" AND klistrad=0")
Set ObjRSGroupklis = ObjConn.Execute("SELECT * FROM group_tradar WHERE group_id="& Request.Querystring("groupid") &" AND klistrad=1")
%>

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[MySQL][ODBC 3.51 Driver][mysqld-5.0.45-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND klistrad=0' at line 1

/group_forumet.asp, line 25

Medlem sedan sep. 2006462 inlägg
#2

Klistrad är en typ "INT 11" i databasen

Medlem sedan juni 200032 967 inlägg
#3
  1. Ställ frågor om SQL i SQL-forumet.
  2. Skriv ut den färdiga SQL-frågan med response.write istället för att exekvera den. Då ser du om det saknas något eller om något värde ser konstigt ut.
Medlem sedan sep. 2006462 inlägg
#4

Och hur skulle den response.write se ut då? Jag gjorde en, men man kan ju varken sätta den före den kod jag skrev tidigare, eller under då man får error.

Medlem sedan juni 200032 967 inlägg
#5

Skriv ut istället för att exekvera - inte samtidigt.

strSQL = "SELECT * FROM group_tradar WHERE group_id="& Request.Querystring("groupid") &" AND klistrad=0"
Response.write strSQL
response.end
Medlem sedan sep. 2006462 inlägg
#6

nu fick jag fram

SELECT * FROM group_tradar WHERE group_id= AND klistrad=0
Medlem sedan juni 200032 967 inlägg
#7

Då ser du vad som är fel.

Medlem sedan sep. 2006462 inlägg
#8

Precis, hur kommer det sig att den inte får ett groupid ?

Medlem sedan juni 200032 967 inlägg
#9

Du har inte skickat något i querystring? :)

Medlem sedan mars 20034 471 inlägg
#10

Jeppeweb skrev:

Precis, hur kommer det sig att den inte får ett groupid ?

Därför att Request.Querystring("groupid") är tom.

Medlem sedan sep. 2006462 inlägg
#11

Självklart :P

Medlem sedan mars 20041 505 inlägg
#12

Du bör söka efter "SQL-injection" och läsa på om det eftersom din kod lider av denna typ av säkerhetshål.

Medlem sedan sep. 2006462 inlägg
#13

Nej, det gör den inte? Jag kör skydd från en annan fil som inkluderas på varje sida.

Medlem sedan juni 200032 967 inlägg
#14

Det påverkar ju inte att du har säkerhetshål i dina SQL-frågor. Som sagt - sök på SQL injection.

Medlem sedan sep. 2006462 inlägg
#15

Googlade men blev inte så mycket klokare.

Har den här koden säkerhetshål?

<%
If not session("inloggad") = "ja" Then
Response.Redirect "?visa=start"
End If
%>

<%

	Set ObjRS = ObjConn.Execute("SELECT * FROM medlemmar where id="& Request.Querystring("userid") &"")

		If ObjRS.Eof then
	
			Response.Redirect "?visa=start"
			
		End If
	
%>

<%
Set ObjRSCheckit = ObjConn.Execute("SELECT * FROM visitors WHERE fromid="& CLng(Session("id")) &" AND tillid="& CLng(ObjRS("id")) &"")
%>
<%If ObjRSCheckit.eof then%>
<%
ObjConn.Execute("INSERT INTO visitors (tillid, tillanv, fromid, fromanv, datum) VALUES ('"& ObjRS("id") &"', '"& ObjRS("anvnamn") &"', '"& Session("id") &"', '"& Session("anvnamn") &"', '"& now() &"')")
%>
<%Else%>
<%
ObjConn.Execute("UPDATE visitors set datum='"&now()&"' WHERE tillid="& CLng(ObjRS("id")) &" AND fromid="& CLng(Session("id")) &"")
%>
<%End If%>

<%
ObjConn.Execute("UPDATE medlemmar set online_tid='"&now()&"', online_act='Kollar in användaren "& ObjRS("anvnamn") &"' where anvnamn='"& session("anvnamn") &"'")
%>
<%

If DateDiff("n", ObjRS("online_tid"), Now) > 15 Then

ObjConn.Execute("UPDATE medlemmar set online='0' where anvnamn='"& ObjRS("anvnamn") &"'")

End If
%>
Medlem sedan sep. 2006462 inlägg
#16

Skulle man kunna göra det här säkrare?

Function fixbug(strText)
strText = Replace(strText,"'","''")
strText = Replace(strText,"\","\\")
fixbug = strText
End Function

Function noHTML(ByVal text)

text = Replace(Server.HTMLEncode(text),vbCrlf,"")

noHTML = text
End Function

Och det här..?


<%
Function IsAnvnamn(strValue)
  With New RegExp
  .Pattern="^[0-9A-Za-z_-]+$"
  IsAnvnamn=.Test(strValue)
  End With
End Function 
%>

<%
Function IsEmail(strValue)
  With New RegExp
  .Pattern="^[^ ]+@[^ ]+\.[A-Za-z]+$"
  IsEmail=.Test(strValue)
  End With
End Function 
%>

Tacksam för hjälp

Medlem sedan juni 200032 967 inlägg
#17

Du har ju en funktion som heter fixbug() - varför använder du inte den?

Medlem sedan sep. 2006462 inlägg
#18

Okej, jadu. Hur skulle det se ut ifall jag använde den? Ha.

Uppenbarligen så var inte den koden skyddad heller? Vad ska jag ha för att få den bästa möjliga skyddad?

Medlem sedan mars 20034 471 inlägg
#19

Jeppeweb skrev:

Har den här koden säkerhetshål?

SELECT * FROM medlemmar where id="& Request.Querystring("userid")

Ja. För att ta första bästa enkla exempel. Ponera att Querystring innehåller följande:

"0 OR 1=1"

Nu får du ut alla medlemmar. Det kan bli avsevärt värre....

Medlem sedan sep. 2006462 inlägg
#20

Hur ska jag skydda mig då!?

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)