/ 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
Sikring af querystrings ??
Fra : Martin_P


Dato : 10-10-02 11:13

Jeg er ved at lave en side, hvor menuen blive dannet fra en database.
I denne menu bliver alle punkter kaldet til en pageref fil. koden er
her:

pageref.asp:

<%
SET Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=jagt"

Dim MitValg

MitValg = Request.QueryString("page")

sql = "Select * from menu where id=" &MitValg

set rs = Conn.Execute(sql)


if rs("link") <> "" then
link = "default.asp?page=" &rs("link")
else
link = "default.asp?page=notfound"
end if
      response.redirect link



conn.close
set Conn = nothing
%>

Det virker også fint nok, men hvis man forsøger at hijacke linien, og
skrive et ugyldigt pageref nr., så fejler siden selvfølgelig p.gr.a.
MitValg argumentet i sql strengen.

Men hvordan garderer man sig imod det?

for en god ordens skyld tror jeg lige jeg paster menu.asp:

<%

SET Conn = Server.CreateObject("ADODB.Connection")

Conn.Open "DSN=jagt"

sql = "Select * from menu order by id"

Set rs = Conn.Execute(sql)
%>
<%
Do while not rs.eof
%>
<p class=<%=rs("class")%>><a
href="pageref.asp?page=<%=rs("id")%>"><%=rs("menu")%></a>

<%
rs.movenext

loop

conn.close
set Conn = nothing
%>

Class er defineret i databasen.

Martin_P

 
 
Lars Hoffmann (10-10-2002)
Kommentar
Fra : Lars Hoffmann


Dato : 10-10-02 11:35


"Martin_P" <mpXXX@alkaline-batteries.dk> escribió en el mensaje
news:skkaqu01c6o1ldtpoi4uh7anvgqmdsigl2@4ax.com...
> Jeg er ved at lave en side, hvor menuen blive dannet fra en
database.
> I denne menu bliver alle punkter kaldet til en pageref fil. koden
er
> her:
>
> pageref.asp:
>
> <%
> SET Conn = Server.CreateObject("ADODB.Connection")
> Conn.Open "DSN=jagt"
>
> Dim MitValg
>
> MitValg = Request.QueryString("page")
>
> sql = "Select * from menu where id=" &MitValg
>
> set rs = Conn.Execute(sql)
>
>
> if rs("link") <> "" then
> link = "default.asp?page=" &rs("link")
> else
> link = "default.asp?page=notfound"
> end if
> response.redirect link
>
>
>
> conn.close
> set Conn = nothing
> %>
>
> Det virker også fint nok, men hvis man forsøger at hijacke linien,
og
> skrive et ugyldigt pageref nr., så fejler siden selvfølgelig
p.gr.a.
> MitValg argumentet i sql strengen.
>
> Men hvordan garderer man sig imod det?

Det er slet ikke saa svært, men der er lige et par ting du skal tage
højde for:

1) Du bør ikke udføre SQL uden først at have kontrolleret de værdier
som brugeren kan introducere. Forestil dig at siden bliver kaldt med
minside.asp?id=shutDown()*

2) Du skal sikre dig er der bliver returneret mindst 1 register fra
din database, ellers vil din side give en fejlmeddelelse når du
prøver at vise et ikke-eksisterende register.


Det kan løses på denne måde:




<%

Dim isOK
Dim errMsg
Dim MitValg


isOK=true


MitValg = Request.QueryString("page")

if isnumeric(mitValg) then

SET Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=jagt"

sql = "Select * from menu where id=" &MitValg

set rs = Conn.Execute(sql)

if rs.eof and rs.bof then
isOK=false
errMsg="linket eksisterer ikke"
else

if rs("link") <> "" then
link = "default.asp?page=" &rs("link")
else
link = "default.asp?page=notfound"
end if

end if


conn.close
set Conn = nothing

else
isOK=false
errMsg="slem hacker - fy fy!"
end if


if isOK then
response.redirect link
else
response.write errMsg
endif


%>

Med venlig hilsen
Lars Hoffmann

* Hvor shutDown er en funktion der slukker for din database server



Steen (11-10-2002)
Kommentar
Fra : Steen


Dato : 11-10-02 10:26

"Lars Hoffmann" <lars@intercambiodvd.com> skrev:

[snip]

> 1) Du bør ikke udføre SQL uden først at have kontrolleret de værdier
> som brugeren kan introducere. Forestil dig at siden bliver kaldt med
> minside.asp?id=shutDown()*

[snip]

> * Hvor shutDown er en funktion der slukker for din database server

Findes der en sådan funktion?!? Det har jeg da aldrig hørt om?

Mvh Steen



Lars Hoffmann (11-10-2002)
Kommentar
Fra : Lars Hoffmann


Dato : 11-10-02 10:31

"Steen" <nospam@nospam.dk> escribió

> > * Hvor shutDown er en funktion der slukker for din database
server
>
> Findes der en sådan funktion?!? Det har jeg da aldrig hørt om?

På MS sql server findes den, ved andre databaser hedder den måske
noget andet. Der findes adskillige funktioner som du ikke ønsker at
dine brugere bare bør kunne udføre uden videre.
Med venlig hilsen
Lars Hoffmann



Jens Gyldenkærne Cla~ (11-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-10-02 11:02

Lars Hoffmann skrev:

> På MS sql server findes den, ved andre databaser hedder den
> måske noget andet. Der findes adskillige funktioner som du
> ikke ønsker at dine brugere bare bør kunne udføre uden videre.

En af metoderne til at undgå "pilleri" er at lave differentierede
brugerrettigheder. Der er ingen grund til at bruge en
systemadministratorkonto til andre end systemadministratorer -
ligesom der ikke er nogen grund til at brugere skal have
rettigheder til at skrive i en database hvis de ikke har brug for
det.
--
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

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

Månedens bedste
Årets bedste
Sidste års bedste