|
| Sikkerhedshul i loginscripts? Fra : MooreHojer |
Dato : 19-05-05 12:01 |
|
Hej NG
Min lillebror fortalte at han hørt om et sikkerhedshul som efter sigende
skulle være i de fleste loginscripts lavet i ASP. Han kunne ikke huske
helt præcist hvad det var, men mente at det var noget med at man kunne
indsætte 'OR', 'AND' eller noget i den retning i loginfelterne og så
bliver man logget ind...
Er der noget om snakken eller er det bare øregas? Og hvis det er rigtigt
hvordan er det så lige helt præcist det hænger sammen og hvordan
beskytter man sig mod det?
På Forhånd Tak!
--
Moore Hojer
http://validator.w3.org/
http://jigsaw.w3.org/css-validator/
| |
Jørgen Müller (19-05-2005)
| Kommentar Fra : Jørgen Müller |
Dato : 19-05-05 12:11 |
|
MooreHojer skrev:
>Min lillebror fortalte at han hørt om et sikkerhedshul som efter sigende
>skulle være i de fleste loginscripts lavet i ASP. Han kunne ikke huske
>helt præcist hvad det var, men mente at det var noget med at man kunne
>indsætte 'OR', 'AND' eller noget i den retning i loginfelterne og så
>bliver man logget ind...
Se her http://www.asp-faq.dk/article/?id=95
--
Med Venlig Hilsen
Jørgen Müller
| |
Kasper Lindberg (19-05-2005)
| Kommentar Fra : Kasper Lindberg |
Dato : 19-05-05 12:42 |
|
Jørgen Müller wrote in dk.edb.internet.webdesign.serverside.asp:
> MooreHojer skrev:
> >Min lillebror fortalte at han hørt om et sikkerhedshul som efter sigende
> >skulle være i de fleste loginscripts lavet i ASP. Han kunne ikke huske
> >helt præcist hvad det var, men mente at det var noget med at man kunne
> >indsætte 'OR', 'AND' eller noget i den retning i loginfelterne og så
> >bliver man logget ind...
>
> Se her http://www.asp-faq.dk/article/?id=95
>
burde ikke være et problem hvis man bruger nedenstående metode
bruger=request.form("...")
password=request.form("...")
SQL="select * from tabel where bruger='" & bruger & "'"
rs.open SQL, osv.
if password=rs.fields("password") then
den kan eventuelt udvides med at man tæller hvor mange records der blev
hentet.
hvis der blev hentet mere end én record er der noget galt.
/Kasper
--
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
| |
Jens Gyldenkærne Cla~ (19-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 19-05-05 13:00 |
|
Kasper Lindberg skrev:
>> Se her http://www.asp-faq.dk/article/?id=95
> burde ikke være et problem hvis man bruger nedenstående metode
>
> bruger=request.form("...")
> password=request.form("...")
>
> SQL="select * from tabel where bruger='" & bruger & "'"
- men det er det. Den metode du angiver fjerner noget af
sikkerhedsproblematikken, men man vil stadig få en grim sql-fejl hvis
brugernavnet indeholder et sql-anførselstegn.
Der er ingen grund til at udsætte sig selv for sql-injection. Man bør
altid escape (jf. artiklen ovenfor) eller evt. bruge ADO-forespørgsler
med parametre i stedet.
--
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
| |
Kasper Lindberg (19-05-2005)
| Kommentar Fra : Kasper Lindberg |
Dato : 19-05-05 14:14 |
|
Jens GyldenkærneClausen wrote
>
> Den metode du angiver fjerner noget af
> sikkerhedsproblematikken, men man vil stadig få en grim sql-fejl hvis
> brugernavnet indeholder et sql-anførselstegn.
>
> Der er ingen grund til at udsætte sig selv for sql-injection. Man bør
> altid escape (jf. artiklen ovenfor) eller evt. bruge ADO-forespørgsler
> med parametre i stedet.
Det har du ret i men, jeg angav bare hvordan man forhindrer brugen af "
OR ''='' "
hvilken behandling af ens input man laver fra man henter til man bruger
dem i en SQL-sætning, må være op til den enkelte programør.
Og, ja, du har helt ret i man bør "escape".
/Kasper
--
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
| |
Jens Gyldenkærne Cla~ (19-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 19-05-05 14:49 |
|
Kasper Lindberg skrev:
> Det har du ret i men, jeg angav bare hvordan man forhindrer brugen af "
> OR ''='' "
Jo - men jeg mener der er to problemer med dit løsningsforslag.
Dels sikrer den ikke mod parsefejl i sql-sætningen (jf. sidste indlæg),
og dels udnytter man ikke databasen til det den er god til - nemlig at
søge efter oplysninger.
> Og, ja, du har helt ret i man bør "escape".
Hvis man sikrer sig mod sql-injection, behøver man ikke dobbelttjekke
adgangskoden.
--
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
| |
Casper Bang (19-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 19-05-05 13:04 |
|
> burde ikke være et problem hvis man bruger nedenstående metode
>
> bruger=request.form("...")
> password=request.form("...")
>
> SQL="select * from tabel where bruger='" & bruger & "'"
> rs.open SQL, osv.
>
> if password=rs.fields("password") then
Det er ikke samme sikkerhedsproblem du får... men stadig et problem.
Hvis du i brugernavn skriver:
' OR password = 'admin
og i passwordfeltet skriver
admin
kan du logge ind i den første konto med passwordet "admin"... Du bestemmer
ikke hvilken konto du kommer ind i, men kan stadig komme ind i de forkerte.
> den kan eventuelt udvides med at man tæller hvor mange records der blev
> hentet.
> hvis der blev hentet mere end én record er der noget galt.
I ovenstående exploit kan dette hjælpe lidt... hvis altså to konti har samme
PW.
Altid replace ' med '' fra inputs.
| |
Kasper Lindberg (19-05-2005)
| Kommentar Fra : Kasper Lindberg |
Dato : 19-05-05 14:20 |
|
Casper Bang wrote in dk.edb.internet.webdesign.serverside.asp:
> Det er ikke samme sikkerhedsproblem du får... men stadig et problem.
> Hvis du i brugernavn skriver:
> ' OR password = 'admin
> og i passwordfeltet skriver
> admin
> kan du logge ind i den første konto med passwordet "admin"... Du bestemmer
> ikke hvilken konto du kommer ind i, men kan stadig komme ind i de forkerte.
>
du har ret i at man ved ovenstående metode kan logge ind som den bruger, der
har kodeordet "admin", men det kræver kendskab til databasens opbygning og
egentlig også kendskab til et kodeord.
en programør kan ved at kalde sin databases felter andet end "Bruger" og
"password" gøre det svære at gætte felternes navne.
kendskab til kodeord, kan en programør dog ikke styre.
/Kasper
--
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
| |
Tomasz Otap (21-05-2005)
| Kommentar Fra : Tomasz Otap |
Dato : 21-05-05 10:55 |
|
Kasper Lindberg wrote:
> du har ret i at man ved ovenstående metode kan logge ind som den bruger, der
> har kodeordet "admin", men det kræver kendskab til databasens opbygning og
> egentlig også kendskab til et kodeord.
>
> en programør kan ved at kalde sin databases felter andet end "Bruger" og
> "password" gøre det svære at gætte felternes navne.
Det kommer faktisk lidt an på, hvordan fejlhåndtering på serveren er sat
på. De fleste ASP-fortolkere kører med standardopsætning, hvor den fulde
fejl vises på skærmen. Sætter du så en enkelt anførelsestegn i feltet
Login, kan du f.eks. få en fejl af type:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in
query expression 'siteBrugere.mitLoginNavn ='''.
Nu har du fat i både navnet på tabellen og navnet på login-feltet.
Bruger du samme teknik på Password-feltet, får du også fat i navnet på det.
Fejlbeskeder varierer dog meget fra database til database -
MSSQL-serverens beskeder er f.eks. mindre transparente og du får sværere
ved at udlede de samme informationer ud fra dem. Men der er stadig
masser af muligheder. Check f.eks. ud den her ret spændende dokument
omkring SQL-injections:
http://kortlink.dk/t2c
t
| |
Christian Kragh (19-05-2005)
| Kommentar Fra : Christian Kragh |
Dato : 19-05-05 15:04 |
|
Du har ganske ret i at der er et sikerhedsproblem i asp.
Hvis man har følgende SQL sætningen.
"select * from tbluser where ((bnavn = '" & formbruger & "') and (bnavnkode
='" & formpass & "'))"
og man skriver ' or ' i feltet med brugernavn og ' or ' i feltet til kode så
er der en stor chance for at blive logget ind...
Derfor har jeg før min forestørsel på sql strengen erstattet alle tegn som
jeg ikke acceptere.
Dette gælder for ", ', <, >, #, % og &...
Christian
--
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
| |
Erik Ginnerskov (21-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-05-05 00:03 |
|
MooreHojer wrote:
> Hej NG
>
> Min lillebror fortalte at han hørt om et sikkerhedshul som efter
> sigende skulle være i de fleste loginscripts lavet i ASP. Han kunne
> ikke huske helt præcist hvad det var, men mente at det var noget med
> at man kunne indsætte 'OR', 'AND' eller noget i den retning i
> loginfelterne og så bliver man logget ind...
Det script, jeg har liggende på
http://hjemmesideskolen.dk/scripts/asppass/default.asp giver tilsyneladende
ikke den mulighed. Jeg har i hvert fald ikke været i stand til at
reproducere fejlen.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Casper Bang (21-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 21-05-05 08:33 |
|
> Det script, jeg har liggende på
> http://hjemmesideskolen.dk/scripts/asppass/default.asp giver
> tilsyneladende
> ikke den mulighed. Jeg har i hvert fald ikke været i stand til at
> reproducere fejlen.
Jeg legede lige lidt med det.
Hvis du i brugernavnet skriver:
' OR 'a' = 'a
og i passwordfeltet for eksempel:
lukmigind
kommer du ind på den første konto med dette kodeord.
På et lille site som det er nu, er det ikke noget problem - chancen for at
gætte et kodeord som findes er minimal.
Men når siden bliver større og med flere brugere, er chancen for at gætte et
kodeord meget større.
| |
Casper Bang (21-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 21-05-05 08:36 |
|
> Det script, jeg har liggende på
> http://hjemmesideskolen.dk/scripts/asppass/default.asp giver
> tilsyneladende
> ikke den mulighed. Jeg har i hvert fald ikke været i stand til at
> reproducere fejlen.
Hov, i den forrige meddelelse var det det forkerte login you skrev.
Brugernavn skal være:
' OR password = 'visit
og password være:
visit
På den måde logger du ind med den første konto med passwordet visit.
| |
Erik Ginnerskov (21-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-05-05 22:09 |
|
Casper Bang wrote:
> Hov, i den forrige meddelelse var det det forkerte login you skrev.
> Brugernavn skal være:
> ' OR password = 'visit
> og password være:
> visit
>
> På den måde logger du ind med den første konto med passwordet visit.
Minsandten ja. Men nu var det jo også lige et password, der var serveret på
forhånd. In real life, hvor alle passwords er ordentligt udformede, så de
ikke kan gættes, bliver det nu nok sværere.
Det må være den systemansvarliges opgave at sørge for ikke at godkende let
gætbare passwords.
Men jeg lægger da gerne et sikrere login ud, hvis man kan hjælpe med til
det. Kravspecifikation:
Viderestilling til fejlside, hvis enten brugernavn eller password er forkert
eller mangler.
Dybe links til beskyttede sider skal afvises - i stedet vises en fejlmelding
eller viderestilles til loginformular.
Efter logout skal man ikke kunne 'bakke' ind igen.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Casper Bang (21-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 21-05-05 22:49 |
|
> Minsandten ja. Men nu var det jo også lige et password, der var serveret
> på
> forhånd. In real life, hvor alle passwords er ordentligt udformede, så de
> ikke kan gættes, bliver det nu nok sværere.
Kommer an på hvad siden skal bruges til.
Webmastere der henter eksemplet fra den side, kan ikke forventes at have nok
kendskab til ASP, til at lave passwords der er "svære at gætte".
Med en side med tusinder af brugere, VIL der være brugere med passwords som
"alkaida", "fiddo" etc... Jo flere brugere du får, jo nemmere bliver det at
bryde ind og misbruge en tilfældig konto.
Det er ret nemt at løse; replace ' med dobbelt '
> Det må være den systemansvarliges opgave at sørge for ikke at godkende let
> gætbare passwords.
Kommer an på hvad det skal bruges til - hvis det er til hr. og fr. Jensen,
kan passwords som "skljfh12o83i" ikke huskes - de SKAL have passwords som på
den ene eller anden måde er nemt at huske.
| |
Erik Ginnerskov (21-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 21-05-05 23:14 |
| | |
Casper Bang (21-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 21-05-05 23:24 |
|
>> Det er ret nemt at løse; replace ' med dobbelt '
>
> Hvilke fil(er)?
>
> Hvis det virkelig er alt, der skal til, kan det kun gå for langsomt med at
> få det rettet. ;)
Det er i linie 33 i filen bruger.asp.
Der hvor du har noget ala
"SELECT * FROM Users WHERE UserID = '"&Request.Form("password")&"'"
Skal du i stedet bruger:
"SELECT * FROM Users WHERE UserID = '"&replace(Request.Form("password"),
"'", "''")&"'"
| |
Erik Ginnerskov (24-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 24-05-05 15:53 |
| | |
Jens Gyldenkærne Cla~ (22-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 22-05-05 07:49 |
|
Erik Ginnerskov skrev:
>> Det er ret nemt at løse; replace ' med dobbelt '
> Hvis det virkelig er alt, der skal til, kan det kun gå for
> langsomt med at få det rettet. ;)
Se evt. artiklen her: < http://asp-faq.dk/article/?id=95>.
--
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
| |
Jens Gyldenkærne Cla~ (24-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 24-05-05 22:40 |
|
Erik Ginnerskov skrev:
> strSQL = "SELECT tblUsers.Password FROM tblUsers WHERE
> tblUsers.UserID ='" & strUserName & "'"
>
> ... som jeg har prøvet at modificere sådan:
>
> strSQL = "SELECT tblUsers.Password FROM tblUsers WHERE
> tblUsers.UserID =''" & strUserName & "''"
Nej - det går galt. Der skal kun et sql-anførselstegn til at starte
og slutte værdien. Der hvor der skal dobles op, er *inde* i
strUsername - hvis der altså findes et anførselstegn derinde. Det
gøres med en simpel replace(strUserName, "'", "''")
Se også artiklen her: < http://asp-faq.dk/article/?id=95>.
--
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 (25-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 25-05-05 01:11 |
|
Jens Gyldenkærne Clausen wrote:
> Der hvor der skal dobles op, er *inde* i
> strUsername - hvis der altså findes et anførselstegn derinde. Det
> gøres med en simpel replace(strUserName, "'", "''")
OK, jeg prøvede så at ændre linjen til
strSQL = "SELECT tblUsers.Password FROM tblUsers WHERE tblUsers.UserID ='" &
replace(strUserName, "'", "''")
....men får stadig en Fejl 500:
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i strengen i
forespørgselsudtrykket "tblUsers.UserID ='admin".
..../bruger.asp, line 33
.... linje 33:
rsCheckUser.Open strSQL, strCon
Testopsætning http://hjemmesideskolen.dk/scripts/test/default.asp
> Se også artiklen her: http://asp-faq.dk/article/?id=95.
Det har jeg nu gjort 2 gange, men kan stadig ikke rigtig se, hvordan det kan
indplaceres i min kode.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Tomasz Otap (25-05-2005)
| Kommentar Fra : Tomasz Otap |
Dato : 25-05-05 07:20 |
|
Erik Ginnerskov wrote:
> OK, jeg prøvede så at ændre linjen til
>
> strSQL = "SELECT tblUsers.Password FROM tblUsers WHERE tblUsers.UserID ='" &
> replace(strUserName, "'", "''")
>
> ...men får stadig en Fejl 500:
Der mangler en afsluttende anførelsestegn efter behandling af strUserName:
strSQL = "SELECT tblUsers.Password FROM tblUsers " &_
"WHERE tblUsers.UserID ='" & replace(strUserName, "'", "''") & "'"
Prøv at se, om det ikke fjerner fejlen...
t
| |
Erik Ginnerskov (25-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 25-05-05 17:18 |
|
Tomasz Otap wrote:
> Der mangler en afsluttende anførelsestegn efter behandling af
> strUserName:
>
> strSQL = "SELECT tblUsers.Password FROM tblUsers " &_
> "WHERE tblUsers.UserID ='" & replace(strUserName, "'", "''") & "'"
>
> Prøv at se, om det ikke fjerner fejlen...
Jepper, så kører det og nu kan man ikke lave en Sql-injection.
Men jeg er rendt ind i et andet problem med det login:
En læser har gjort opmærksom på, at hun med browserens 'Tilbage' kan gense
hentede sider trods logout. Hun oplyser at bruge IE 6 SP2 på WXP.
Jeg kan ikke selv lave det nummer, her IE 6 på Win2000. Heller ikke med
Mozilla 1.7.2 ellr Firefox 1.0.2 kan jeg 'bakke ind igen'. Men hvis jeg
åbner siderne med Opera 7.54, kan jeg godt genindlæse besøgte sider trods
logout.
Hvordan kan jeg helt undgå den funktionsfejl (en gang for alle)?
http://hjemmesideskolen.dk/scripts/asppass/default.asp
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Tomasz Otap (25-05-2005)
| Kommentar Fra : Tomasz Otap |
Dato : 25-05-05 23:12 |
|
Erik Ginnerskov wrote:
> Men jeg er rendt ind i et andet problem med det login:
>
> En læser har gjort opmærksom på, at hun med browserens 'Tilbage' kan gense
> hentede sider trods logout. Hun oplyser at bruge IE 6 SP2 på WXP.
> Jeg kan ikke selv lave det nummer, her IE 6 på Win2000. Heller ikke med
> Mozilla 1.7.2 ellr Firefox 1.0.2 kan jeg 'bakke ind igen'. Men hvis jeg
> åbner siderne med Opera 7.54, kan jeg godt genindlæse besøgte sider trods
> logout.
>
> Hvordan kan jeg helt undgå den funktionsfejl (en gang for alle)?
Hmm.. Prøv evt. at slå caching fra i toppen af scriptet:
<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
Jeg har ikke testet, hvordan Opera vil reagere på disse indstillinger:
IE vil normalt vise "Page expired"-besked og dermed tvinge brugeren til
at reloade siden. Eftersom dine brugerdata bliver opbevaret i sessions,
burde en tilbage+reload kombination bringe dig tilbage til login-siden.
Sider, der ikke caches, kan dog have en direkte irriterende effekt i de
tilfælde, hvor tilbage-knappen er en af de logiske valg for brugeren;
f.eks. hvis der findes en kodeord-beskyttet søgefunktion. Man bruger som
regel tilbage-knappen til at returere til søgeresultat-siden og no-cache
settings vil jo tvinge dig til at reloade søgningen igen. Og
naturligvis, der er jo en grund til, at caching findes.. :)
t
| |
Jens Gyldenkærne Cla~ (26-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 26-05-05 11:02 |
|
Erik Ginnerskov skrev:
> Hvordan kan jeg helt undgå den funktionsfejl (en gang for alle)?
Du kan ikke undgå den fuldstændig. Tomasz har vist hvad man kan indsætte
for at modvirke caching, og det kan også godt hjælpe på problemet. Men
den eneste sikre måde er at bede folk om at lukke deres browser når de
har logget ud. Den besked ses da også fra rigtig mange sider når man har
logget ud.
--
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 (26-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 26-05-05 15:14 |
|
Jens Gyldenkærne Clausen wrote:
> Du kan ikke undgå den fuldstændig. Tomasz har vist hvad man kan
> indsætte for at modvirke caching, og det kan også godt hjælpe på
> problemet.
De koder er allerede fra starten indsat på samtlige beskyttede sider. I
øvrigt viser det sig, at den dame, der havde problemet i IE, havde prøvet
'Tilbage' før logout - hvorved man selvfølgelig skal 'have lov til' at gense
enhver af de beskyttede sider.
> Men den eneste sikre måde er at bede folk om at lukke
> deres browser når de har logget ud.
Det kan selvfølgelig løse problemet på en enkel måde.
> Den besked ses da også fra rigtig
> mange sider når man har logget ud.
Jeg vil næste gang jeg render på en passwordbeskyttet side tjekke, om også
Opera bliver effektivt logget af.
Jeg har samme problem med mit php/MySql-login, men det er OT her. I
php-gruppen har jeg bare endnu ikke fået noget brugbart svar (set fra mit
uvidende synspunkt - en dreven php-programmør havde sikkert for længst
forstået det).
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Jens Gyldenkærne Cla~ (25-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 25-05-05 09:16 |
|
Erik Ginnerskov skrev:
> OK, jeg prøvede så at ændre linjen til
>
> strSQL = "SELECT tblUsers.Password FROM tblUsers WHERE tblUsers.UserID ='" &
> replace(strUserName, "'", "''")
>
> ...men får stadig en Fejl 500:
Du er tættere på nu - men du glemmer at sætte slutanførselstegnet.
> [Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i strengen i
> forespørgselsudtrykket "tblUsers.UserID ='admin".
> .../bruger.asp, line 33
Standardsvaret ved fejl i sql-sætninger er at man skal udskrive sin
sql-variabel. Hvis du gør det, vil du se noget a la:
SELECT tblUsers.Password FROM tblUsers WHERE tblUsers.UserID ='admin
Her skulle det gerne være let at se at der mangler et anførselstegn.
Se evt. hvordan man får udskrevet sql-variablen på siden her:
< http://asp-faq.dk/article/?id=41>
>> Se også artiklen her: http://asp-faq.dk/article/?id=95.
>
> Det har jeg nu gjort 2 gange, men kan stadig ikke rigtig se, hvordan det kan
> indplaceres i min kode.
Funktionen (plingEscape) kan placeres hvor som helst på siden i en
asp-blok (mellem <% og %>).
Kaldet til funktionen skal placeres der hvor man skal bruge
erstatningen.
Her er et skitseforslag:
<%
' Funktionen der sikrer mod sql-injections
Function plingEscape(tekst)
plingEscape = Replace(tekst & "", "'", "''")
End function
' Variable
Dim strUserName, strSQL
strUserName = plingEscape(Request.Form("user"))
' strUserName indeholder nu brugernavnet, med evt. enkeltanførselstegn
' escapet
strSQL = "SELECT * FROM Users WHERE userID = '" & strUserName & "'"
' resten af koden der kører sql-sætningen mv. er den samme.
%>
--
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
| |
Jens Gyldenkærne Cla~ (26-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 26-05-05 18:50 |
|
Erik Ginnerskov skrev:
> Jeg har samme problem med mit php/MySql-login, men det er OT
> her.
Jo - korrekt nok. Men hovedpointen er den samme uanset hvilket
serversidesprog man anvender. Det er ikke muligt at sikre sig helt
mod tilbageknappen uden at bede folk om at lukke deres browser.
Men man kan sikkert også få php til at sætte nogle headere der
modvirker caching - svarende til Tomasz' eksempel.
--
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
| |
Casper Bang (26-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 26-05-05 19:15 |
|
> Jo - korrekt nok. Men hovedpointen er den samme uanset hvilket
> serversidesprog man anvender. Det er ikke muligt at sikre sig helt
> mod tilbageknappen uden at bede folk om at lukke deres browser.
En anden ret god metode er at skrive følgende imellem de to head-tags:
<script language="javascript">History.Go(1);</script>
hvilket tvinger browseren til at forsøge at hoppe frem igen... sørger for at
en back ikke virker.
Er ikke helt sikker på at funktionen kaldes sådan - det er der sikkert en
anden her i gruppen der ved :)
| |
Erik Ginnerskov (27-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 27-05-05 22:40 |
|
Casper Bang wrote:
> En anden ret god metode er at skrive følgende imellem de to head-tags:
> <script language="javascript">History.Go(1);</script>
Skulle nok snarere være <script type="text/javascript" ...
> hvilket tvinger browseren til at forsøge at hoppe frem igen... sørger
> for at en back ikke virker.
Det vil muligvis - indsat i alle beskyttede sider - virke som ønsket,
forudsat at brugeren ikke under lovligt login ønsker at bruge 'Tilbage' til
at hente en tidligere set side.
Derfor kan jeg ikke lide dit forslag.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Casper Bang (28-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 28-05-05 08:49 |
|
> Det vil muligvis - indsat i alle beskyttede sider - virke som ønsket,
> forudsat at brugeren ikke under lovligt login ønsker at bruge 'Tilbage'
> til
> at hente en tidligere set side.
>
> Derfor kan jeg ikke lide dit forslag.
Hvis der, som skrevet, skal sikres imod at brugeren aldrig kan bruge
tilbageknappen, vil dét være en måde at gøre det på.
| |
Erik Ginnerskov (29-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 29-05-05 15:28 |
|
Casper Bang wrote:
> Hvis der, som skrevet, skal sikres imod at brugeren aldrig kan bruge
> tilbageknappen, vil dét være en måde at gøre det på.
Men hvorfor fratage brugeren muligheden for at gå frem og tilbage mellem
forskellige sider under et lovligt login?
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Casper Bang (29-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 29-05-05 16:59 |
|
>> Hvis der, som skrevet, skal sikres imod at brugeren aldrig kan bruge
>> tilbageknappen, vil dét være en måde at gøre det på.
>
> Men hvorfor fratage brugeren muligheden for at gå frem og tilbage mellem
> forskellige sider under et lovligt login?
I don't know... men var det ikke dét der blev spurgt om tidligere i tråden?
| |
Erik Ginnerskov (30-05-2005)
| Kommentar Fra : Erik Ginnerskov |
Dato : 30-05-05 15:54 |
|
Casper Bang wrote:
>> Men hvorfor fratage brugeren muligheden for at gå frem og tilbage
>> mellem forskellige sider under et lovligt login?
>
> I don't know... men var det ikke dét der blev spurgt om tidligere i
> tråden?
Nej. Der var tale om at spærre for at kunne 'bakke' ind igen efter logout.
--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://html-faq.dk
http://ginnerskov.frac.dk/
| |
Casper Bang (30-05-2005)
| Kommentar Fra : Casper Bang |
Dato : 30-05-05 20:35 |
|
>> I don't know... men var det ikke dét der blev spurgt om tidligere i
>> tråden?
>
> Nej. Der var tale om at spærre for at kunne 'bakke' ind igen efter logout.
Ok, min fejl så. Havde forstået at der blev ledt efter en metode til totalt
at forbyde "bakning"
| |
|
|