webForumDet fria alternativet

Server.Execute + 'Låsa Sidor'

ASP

4 svar · 363 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tja

Har en sida där jag visar undersidor m.h.a Server.Execute("").
Nu tänkte jag ta reda på ett bra sätt att spärra, så att man inte kan skriva vad som helst i frågesträngen, för sidorna visas utifrån vad variabeln mP har för värde och det är sidans_namn.

Så skriver jag ?mP=home så hamnar man på förstasidan osv.
Det här ska jag nu försöka "låsa" på ett bra sätt, så att man inte kan köra "förbjudna" filer på det här sättet.
Skiver man ex. vis ?mP=default så kommer ju oändlig loop initieras så att webläsaren hänger sig.
Tänkte om man kan ha med alla "godkända" filnamn i tex. en array och sedan kolla av med tex. en loop (en ifsats går ju det med, men inte lika 'snyggt'.) Det ska naturligtvis vara plättlätt att lägga till filnamn i samma ögonblick som man skapar en ny undersida.

Även undermappar ska vara spärrade, man ska alltså inte kunna skriva en hel sökväg uppe i adressfältet.

Koden jag använder just nu är:

Dim strCat, obj
		strCat = Request.QueryString("mP")
		If (strCat) <> "" Then
 			Set Obj = CreateObject("Scripting.FileSystemObject")
			If Obj.FileExists(Server.MapPath(strCat & ".asp")) Then
				Server.Execute(strCat & ".asp")
             Else
				Server.Execute("includes/404.inc")			 
			 End if
		Else
			Response.reDirect("default.asp?mP=home")
		End if
		Set Obj = Nothing
		Set strCat = Nothing

Tack!

Medlem sedan maj 200010 687 inlägg
#2

Lagra dem någonstans. Alternativen som jag ser det.
* En array. Skicka med en siffra i QueryStringen som pekar på en plats i arrayen.
* Ett dictionary. Kan använda textsträngar istället.
* Databas. Bäst, men kanske lite krångligare.

Här är ett exempel på hur man kunnat göra det med en databas.
http://www.webforum.nu/showthread.php?s=&postid=855322#post855322

Medlem sedan feb. 20034 441 inlägg
#3

Går det att lösa med en Array() med filnamnet istället för en siffra?
Alla mina filnamn innehåller bara a-z, så inga "fula" tecken alls.
Skulle vilja ha ett exempel på hur en sån här array kan se ut samt hur jag loopar igenom den för att kolla mot querytringen.

Tack!

Medlem sedan feb. 20034 441 inlägg
#4

Nu har jag sökt runt lite och knåpat ihop:

<%
sidor = array("sid1","sid2","sid3","sid4")

For i = 0 to UBound(sidor)
	If(sidor(i) = Request.QueryString("mP")) Then
		Server.Execute(Request.Querystring("mP") & ".asp")
	Else
		Response.Write "Den här sidan kan inte visas."
	End If
Next
%>

Har jag tänkt helt galet är kan jag gå vidare med det här?

Medlem sedan maj 200010 687 inlägg
#5

Lite galet är det med tanke på att du måste loopa igenom arrayen. Bättre då att använda ett collection-objekt typ Scripting.Dictionary. Ett exempel:

<%
Dim mP
mP = Request.QueryString("mP")

Dim dic
Set dic = Server.CreateObject("Scripting.Dictionary")
dic.CompareMode = 1

dic("sid1") = 1 :  dic("sid2") = 1 : dic("sid3") = 1 : dic("sid4") = 1

If dic.Exists(mP) Then
	Server.Execute(mP & ".asp")
Else
	Response.Write "Den här sidan kan inte visas."
End If

Set dic = Nothing
%>

Använder hash-teknik för att snabbt hitta rätt.

137 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)