"Phecdaret" <phecdaret@gmail.com> skrev i en meddelelse
news:44d5d4b2$0$15793$14726298@news.sunsite.dk...
> > Bare sådan lidt for sjov....
> > Hvad nu hvis :
> >
> > Request.Form("login") = "Hansemand ' drop table personer " ?
> >
> > eller
> >
> > Request.Form("login") = "Hansemand ' or 1=1--" ?
>
> Hej Michael.
>
> Som jeg har skrevet til Jørn længere nede, så er jeg stadig nybegynder, og
> jeg er ikke sikker på, at jeg har forstået ovenstående korrekt. Jeg ved
> ikke hvad "drop table personer " og "1=1--" betyder, men er din pointe
> ikke, at jeg får problemer, hvis nogle indtaster et login, som ikke står i
> min database? For det er lige præcis det problem, jeg har nu!!! Jeg får
> bare smidt en fejlmeddelse i hovedet, hvis den ikke gendekender login og
> password. Har du nogle forslag til, hvordan jeg løser problemet? Hvordan
> forklarer jeg computeren, hvad den skal gøre, hvis brugernavn og password
> ikke eksisterer?!
>
> Kunne ASP.NET være en løsning? Har læst lidt om validering i en tutorial,
> men kan ikke anvende det i min problemstilling.
>
>
>
> > Du har i det mindste slået fejlmeddelserne fra, på serveren
> > hvor din egen hjemmeside ligger. ;)
>
> Slået fejlmeddelser fra?!! Hvis jeg har gjort det, er det gjort ubevidst.
> Synes nu jeg får rigeligt med fejlmeddelser i øjeblikket
>
> Mvh Kenneth
>
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! =>
http://www.html.dk/tutorials
Nedenstående script illustrere forskellen mellem at bruge parametre i en sql
og samle en sql-streng.
Parametre bruges på samme måde som i .Net og efter samme princip.
Din variabel "Bruger" kan du prøve at sætte til et korrekt brugernavn eller
et forkert som f.eks. "b' or '1=1"
Du kan se scriptet i brug her :
http://michaelweber.dk/sql/sql_injection_test.asp
Med venlig hilsen
Michael Weber
Når du kopiere koden over i en asp-fil, skal du lige holde øje med
linje-ombrydningerne.
Gem følgende som en asp-fil placere den på din server :
<% @ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<!--METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<HTML>
<HEAD>
<TITLE>SQL Injection test</TITLE>
</HEAD>
<BODY>
<%
'---------------------------------------------------------------------------
----------------
' Prøver først at hente password ud fra databasen ved hjælp af ADO´s
parametre.
dim command, conn, strSQL, connectionString, rs, Bruger
' Prøv at sætte den øverste bruger til et korrekt brugernavn og fjern
udkommenteringen og
' udkommentere den anden Bruger.
'Bruger = "KorrektBrugernavn"
Bruger = "b' or '1=1"
response.write "Brugeren har indtastet følgende brugernavn i et inputfelt i
din form : <b>" & Bruger &"</b><br><br><br>"
' Streng til database
connectionString = Server.MapPath("/data.mdb")
' Instantiere et ADO Connection-objekt.
Set conn = server.createobject("ADODB.connection")
' Definere Driver
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
' Be´r ADO-Objektet om at skabe
' forbindelse til DB´en defineret i connectionString
conn.open connectionString
' Instantiere et ADO Command-objekt.
Set command= Server.CreateObject("ADODB.Command")
' Be´r Command-objektet om at benytte conn-objektet
' som forbindelse.
Set command.ActiveConnection = conn
' Definer en streng med sql og indsætter ? (spørgsmålstegn)
' der hvor Parametre skal indsættes.
strSQL ="Select * from personer where Brugernavn=?"
' Sætter sql-strengen som det, command-objektet skal udføre.
command.CommandText=strSQL
' Fortæller command-objektet at vi vil genbruge command-objektet
' igen og databasen skal gemme den første Execution-plan
command.Prepared=true
' Tilføjer parametre til command-objektet.
command.Parameters.Append
command.CreateParameter("Brugernavn",adVarchar,,255,adParamInput)
command("Brugernavn")=Bruger
Set rs = command.Execute
response.write "<b>Resultat ved brug af parametre i SQL-sætningen</b>
:<br>"
if rs.BOF = false then
do
response.write rs("password") & "<br>"
rs.MoveNext
loop while not rs.EOF
response.write "<br><br><br>"
else
response.write "Brugeren findes ikke.<br><br><br>"
end if
conn.close
'---------------------------------------------------------------------------
--
' Førsøger at hente password fra databasen med samme input fra før.
' Denne gang opbygges der en sql-streng.
response.write "<b>Resultat ved brug af SQL-streng</b> :<br>"
' Her samles sql-strengen med inputtet gemt i variablen Bruger
strSQL = " Select * From personer Where Brugernavn ='"& Bruger &"'"
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
conn.open
Set rs = conn.Execute(strSQL)
if rs.BOF = false then
response.write "Der er fundet følgende passwords i databasen :<br>"
do
response.write rs("password") & "<br>"
rs.MoveNext
loop while not rs.EOF
response.write "SQL-sætningen der blev sent til databasen var :<br><b>
"&strSQL&"</b>"
else
response.write "Brugeren findes ikke når der bruges parametre i
sql-forespørgslen."
end if
conn.close
%><BR>
</BODY>
</HTML>