webForumDet fria alternativet

Hela databasen raderades?

14 svar · 568 visningar · startad av clacke

clackeMedlem sedan feb. 2003234 inlägg
#1

Igår fick jag hela databasen raderad när en kund skulle skriva ut en sida, då blev det något fel och den började skriva ut en massa sidor och efter det säger han att all info var raderad i databasen, och det var det och därtill så var alla uppladdade bilder i en mapp raderad också. Jag förstår inte hur detta kunna hänt!
Jag har en sida som listar alla inläggen i databasen och där har jag även en raderar länk, vid klick på länken så kommer man till nedan sida, kan någon se om det är något fel på sidan som skulle kunna ha raderat allt?
Tack på förhand!

<%
	response.buffer=true

	dim conn,rs,sql,strConn,id,name,delete,Mappnamn,Mapp,Mappkoll,onpage
	dim img1, img2, img3, img4, img5, marke,Uploader

	'*****************hämtar id:et från delete länken*******************''
		id=request.querystring("id")
		delete=request.querystring("del")
		img1=request.querystring("img1")
		img2=request.querystring("img2")
		img3=request.querystring("img3")
		img4=request.querystring("img4")
		img5=request.querystring("img5")
		marke=request.querystring("marke")
		
	'********raderar länken********
	sql="Delete FROM bilar WHERE upload_id="& request.querystring("id") &";"	
	set rs=conn.execute(sql)
	
		
   	'**kollar om bilderna ligger på servern och deletar dom vid klick på delete länken på upload_links.asp***************
	MappNamn = "images"
	Set Mappkoll = Server.CreateObject("Scripting.FileSystemObject")
	Set Mapp = Mappkoll.GetFolder(Server.MapPath(MappNamn))
	
	'If Request.QueryString("del") = "delete" Then
	If MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & img1) Then 'OR MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing2")) OR MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing3")) OR MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing4")) OR MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing5")) Then
			
			MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & img1)
			 'MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing2"))
			'MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing2"))
			 'MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing3")) 
			'MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing3"))
			 'MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing4")) 
			'MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing4"))
			 'MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing5")) 
			'MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & Uploader.Form("existing5"))
			
			
			
			'Set Mapp = Nothing
			'Set Mappkoll = Nothing
		End If
		
		MappNamn = "images"
		Set Mappkoll = Server.CreateObject("Scripting.FileSystemObject")
		Set Mapp = Mappkoll.GetFolder(Server.MapPath(MappNamn))
		If MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & img2) Then
			MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & img2)		
			'Set Mapp = Nothing
			'Set Mappkoll = Nothing
		End If
				MappNamn = "images"
		Set Mappkoll = Server.CreateObject("Scripting.FileSystemObject")
		Set Mapp = Mappkoll.GetFolder(Server.MapPath(MappNamn))
		If MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & img3) Then
			MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & img3)		
			'Set Mapp = Nothing
			'Set Mappkoll = Nothing
		End If
				If MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & img4) Then
			MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & img4)		
			'Set Mapp = Nothing
			'Set Mappkoll = Nothing
		End If
				If MappKoll.FileExists(Server.MapPath(MappNamn) & "\" & img5) Then
			MappKoll.DeleteFile(Server.MapPath(MappNamn) & "\" & img5)		
			Set Mapp = Nothing
			Set Mappkoll = Nothing
		End If

	'End If  
	
	response.redirect("links.asp")
	
%>
RikardMedlem sedan dec. 199917 055 inlägg
#2

SQL injections?

cyprysMedlem sedan dec. 20003 563 inlägg
#3

Det enda som behövde stå i request.querystring("id") var t.ex. 0 OR 1 = 1 för att radera alla poster.

Utgå från att all indata du kan få är skadlig.

clackeMedlem sedan feb. 2003234 inlägg
#4

Cyprys...förstår inte riktigt vad du menar?
Hur kan 0 OR 1=1 radera alla poster, jag säger ju att det ska raderas där upload_id="& request.querystring("id") hur kan det radera annat än det den får från querystringen?
Hur åtgärdar jag problemet?

UlfTMedlem sedan maj 20018 027 inlägg
#5

clacke skrev:

Cyprys...förstår inte riktigt vad du menar?
Hur kan 0 OR 1=1 radera alla poster, jag säger ju att det ska raderas där upload_id="& request.querystring("id") hur kan det radera annat än det den får från querystringen?
Hur åtgärdar jag problemet?

Tänk dig att du kör sql-satsen:

delete from table where id=0 or 1=1

Var stämmer detta villkor? Jo, det stämmer dels där id=0, men även där 1=1, dvs överallt. Vips! Hela tabellen raderad!

clackeMedlem sedan feb. 2003234 inlägg
#6

Ok, jag är med på det, men hur kommer han fram till att
id=0 or 1=1 då?
Måste jag köra en if sats först då och kolla om querystringen har ett värde?

UlfTMedlem sedan maj 20018 027 inlägg
#7

clacke skrev:

Ok, jag är med på det, men hur kommer han fram till att
id=0 or 1=1 då?

Han har helt enkelt chansat på att sql injection funkar på din site, eller så har det gått fel någon annanstans, så att en destruktiv sql-kod har kommit.

clacke skrev:

Måste jag köra en if sats först då och kolla om querystringen har ett värde?

Du måste kolla att query-stringen har endast ett numeriskt värde.

clackeMedlem sedan feb. 2003234 inlägg
#8

Ok får väl försöka kolla det, men vad är "sql injection" ?

UlfTMedlem sedan maj 20018 027 inlägg
#9

clacke skrev:

Ok får väl försöka kolla det, men vad är "sql injection" ?

Det handlar om att man "injicerar" sql-kod i sql-satser som redan används. På så vis kan man få sql-satserna att utföra oväntade resultat. I ditt fall, kan det alltså vara sql-villkoret "0 or 1=1" som har injicerats till din sats.

clackeMedlem sedan feb. 2003234 inlägg
#10

Ok, Har kollat lite här men hur kollar jag om querystringen är
ett tal?

UlfTMedlem sedan maj 20018 027 inlägg
#11

I ditt fall borde det räcka med:

IsNumeric(request.querystring("id"))

Om detta stämmer, att hela strängen verkligen är numerisk, då vet du att den endast innehåller ett enda id-nummer, och således kan endast en post raderas. Då kan du köra din delete-sats.

mrblondeMedlem sedan aug. 20012 349 inlägg
#12
if isnumeric(request.querystring("id")) then
     do stuff
else
     error!
end if
clackeMedlem sedan feb. 2003234 inlägg
#13

Tack så mycket, då får jag kolla det lite senare!
Måste ut en sväng.

Bosse168Medlem sedan nov. 20031 018 inlägg
#14

isnumeric(request.querystring("id")) kan man använda det direkt i en SQL sats? Använder MySQL 4.0.18-nt.

PeeerMedlem sedan mars 20025 907 inlägg
#15

Nej, du måste göra en kontroll före du exekverar sql-satsen.

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