/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Sikkerhedshul
Fra : Erik Ginnerskov


Dato : 09-12-05 19:09

Hej NG

I sidste uge fik jeg med hjælp herfra stykket noget dynamisk include sammen.
Men et grundigt tjek viser desværre, at scriptet er sårbart for brugeres
eventuelle ønsker om at inkludere andre filer end de tiltænkte.

Scriptet ser pt. sådan ud:

<%
side_ID = Request.Querystring("id")
if side_ID = "" Then
side_ID = "s1" /* default indhold hvis intet er specifiseret */
end if
Server.Execute(side_ID & ".inc")
%>

Tanken er så, at man i stedet definerer et array af lovlige
inkluderingsfiler og derefter tester, om det bestilte sideindhold er
defineret i arrayet.

Hvis ikke, skal den defaulte fil inkluderes. Pseudokode i 2. linje:

<%
side_ID = Request.Querystring("id")
if side_ID ikke = s1 eller s2 eller s3 ...
side_ID = "s1"
end if
Server.Execute(side_ID & ".inc")
%>

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



 
 
Christian M. Nielsen (09-12-2005)
Kommentar
Fra : Christian M. Nielsen


Dato : 09-12-05 20:27

Hvad er det du gerne vil have hjælp til?

--

Mvh / Regards
-=< Christian >=-
What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk
The scary thing about looking for truth is that you might find it.



Erik Ginnerskov (09-12-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 09-12-05 21:32

Erik Ginnerskov wrote:
>> Tanken er så, at man i stedet definerer et array af lovlige
>> inkluderingsfiler og derefter tester, om det bestilte sideindhold er
>> defineret i arrayet.
>>
>> Hvis ikke, skal den defaulte fil inkluderes. Pseudokode i 2. linje:
>>
>> <%
>> side_ID = Request.Querystring("id")
>> if side_ID ikke = s1 eller s2 eller s3 ...
>> side_ID = "s1"
>> end if
>> Server.Execute(side_ID & ".inc")
>> %>

Christian M. Nielsen wrote:
> Hvad er det du gerne vil have hjælp til?

At få strikket if-sætningen sammen, så den sammenligner input med arrayet.
Ved læsning på html.dk's asp-tutorial er jeg kommet frem til noget, der ser
ud som om det virker; men hvad siger ekspertisen?

<%
Dim input_ID
input_ID = "ns1, ns2, ns3, ns4, ns5, ns6, ns7, ns8"
side_ID = Request.Querystring("id")
if side_ID <> input_ID Then
side_ID = "ns1"
end if

Server.Execute(side_ID & ".inc")
%>

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/




Erik Ginnerskov (09-12-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 09-12-05 21:41

Erik Ginnerskov wrote:
Ved læsning på html.dk's asp-tutorial er jeg kommet frem til
> noget, der ser ud som om det virker
>
> <%
> Dim input_ID
> input_ID = "ns1, ns2, ns3, ns4, ns5, ns6, ns7, ns8"
> side_ID = Request.Querystring("id")
> if side_ID <> input_ID Then
> side_ID = "ns1"
> end if
>
> Server.Execute(side_ID & ".inc")
> %>

Det var også kun tilsyneladende. Jeg kan ikke længere inkludere noget
ulovligt, men jeg kan heller ikke inkludere det, som skal kunne inkluderes -
siden inkluderer element ns1 uanset hvad.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (09-12-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-12-05 23:27

Erik Ginnerskov skrev:

> At få strikket if-sætningen sammen, så den sammenligner input
> med arrayet.

Hvorfor vil du bruge et array?

Jeg vil mene at en select-sætning skulle kunne klare det du
efterspørger.


> Dim input_ID
> input_ID = "ns1, ns2, ns3, ns4, ns5, ns6, ns7, ns8"

input_ID er her bare en lang streng.

> side_ID = Request.Querystring("id")
> if side_ID <> input_ID Then

- så medmindre at du putter hele strengen i din querystring, vil
ovenstående if-sætning altid være sand.

Hvis du *vil* have et array, kan du bruge funktionen Split på
input_id - eller angive dit array direkte: Array("ns1", "ns2", ...)

Men så skal din sammenligning til at tjekke alle elementer i
arrayet - det er en upraktisk metode IMO.


Jeg vil foreslå følgende:

<%
side_ID = Request.Querystring("id")
Dim side

Select Case side_ID
   Case "ns1", "ns2", "ns3", "ns4", ...
       side = side_ID
   Case Else
       side = "ns1"
End Select

%>

Hvis du kan opstille mere formelle regler for hvad der er et
gyldigt sideid (fx "ns" plus et tal mellem 1 og 20), kan du lave
validering af formatet i stedet for at validere mod hver eneste
gyldig forekomst.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (10-12-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 10-12-05 02:07

Jens Gyldenkærne Clausen wrote:

> Hvorfor vil du bruge et array?

Det er ikke noget, jeg *vil*. Men til min php-version af dynamisk include
blev problemet løst via et array, så jeg tænkte ...

> Jeg vil mene at en select-sætning skulle kunne klare det du
> efterspørger.

Det er sikkert lige så godt, bare det virker - og er sikkert.

> Jeg vil foreslå følgende:
>
> Dim side
>
> Select Case side_ID
> Case "ns1", "ns2", "ns3", "ns4", ...
> side = side_ID
> Case Else
> side = "ns1"
> End Select

Jeg har nu prøvet at stykke det sammen på denne måde:

<%
side_ID = Request.Querystring("id")
Dim side
Select Case side_ID
Case "ns1", "ns2", "ns3", "ns4", "ns5", "ns6", "ns7", "ns8"
side = side_ID
Case Else
side = "ns1"
End Select
Server.Execute(side & ".inc")
%>

Den kan jeg ikke få til at inkludere moget "forkert", men den inkluderer
fint det, den må. Dermed må problemet anses for at være løst.

> Hvis du kan opstille mere formelle regler for hvad der er et
> gyldigt sideid (fx "ns" plus et tal mellem 1 og 20), kan du lave
> validering af formatet i stedet for at validere mod hver eneste
> gyldig forekomst.

Det kan jeg i princippet ikke, da det skal kunne 'eksporteres'. Derfor skal
det være så enkelt som muligt.

Men jeg siger tak for hjælpen. Det har længe været et efterspurgt emne på
mine sider.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste