webForumDet fria alternativet

Osäker inloggning

ASP

4 svar · 371 visningar · startad av Bj

Medlem sedan sep. 2000314 inlägg
Frågan#1

Har ett problem med en inloggningskod. Den är tydligen inte riktigt säker. Tror det har ngt att göra med Request.Form("anvandarid") 0ch Request.Form("losenord") men är inte säker.
Jag skickar med en del av koden om det är någon som har lite synpunkter på vad man skall ändra.

'Logga in
<b>Användarnamn:</b><br>
<input type="text" size="30" name="anvandarid"><p>
<b>Lösenord:</b><br>
<input type="password" size="30" name="losenord"><p>
<input type="submit" value="Logga in!">
============================================
'Sedan kommer man hit
'Anger vilken sida användaren befinner sig på
Page = "Kontrollsida" 

'Session tilldelas användarnamn och lösenord
Session("username") = Request.Form("anvandarid")
Session("losenord") = Request.Form("losenord")
Response.Expires = -1500
<!--#include file="inc_admin_header.inc" -->
============================================
'Och den inc_admin_header ser ut så här
Session.LCID = 1053
Response.Expires = -1500

SQL = "SELECT Namn,Email,Niva1,Niva2,Niva3 FROM tblAdminLogin WHERE AnvandarId = '" & Session("username") & "' AND losenord = '" & Session("losenord") & "' AND " & Page & " = '1'"

'##########Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\test\databasen.mdb"
'Om inget resultat hittades
Set RecSet = Connect.Execute(SQL)
If RecSet.EOF Then
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
'Nollställ användarnamn och lösenord
Session("username") = ""
Session("losenord") = ""
Session.Abandon
'Skicka tillbaka användaren till inloggningssidan
Response.Redirect("admin_login.asp?status=denied")

'Om resultat hittades
Else

'Tilldela resultatet till variabler
Namn = RecSet("Namn")
Email = RecSet("Email")
Niva1 = RecSet("Niva1")
Niva2 = RecSet("Niva2")
Niva3 = RecSet("Niva3")

'Stäng kopplingar
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
Medlem sedan juni 200032 967 inlägg
#2

* Varför lagrar du lösenordet i en session?

* Du bör alltid se till att ersätta eventuella apostrofer i värden du hämtar in för användning i en SQL-fråga.

strUserName = Replace(Request.Form("anvandarid"), "'", "''")
strPassword = Replace(Request.Form("losenord"), "'", "''")
SQL = "SELECT Namn,Email,Niva1,Niva2,Niva3 FROM tblAdminLogin WHERE AnvandarId = '" & strUserName & "' AND losenord = '" & strPassword & "' AND " & Page & " = '1'"
Medlem sedan dec. 20003 887 inlägg
#3

Det du kan drabbas av här är i första hand SQL-injections. Du undviker detta genom att göra följande små ändringar

Session("username") = Replace(Request.Form("anvandarid"), "'", "''")
Session("losenord") = Replace(Request.Form("losenord"), "'", "''")

Det bästa är att lägga in detta i en funktion, eftersom det krävs så fort du ska behandla klientdata i din SQL.

Function SecureSQL(strValue)
  SecureSQL = Replace(strValue, "'", "'')
End Function
.
.
.
Session("username") = SecureSQL(Request.Form("anvandarid"))
Session("losenord") = SecureSQL(Request.Form("losenord"))

red. Attans snabel ;)

Medlem sedan sep. 2000314 inlägg
#4

Tack grabbar.
Med en liten apostrof efter SecureSQL = Replace(strValue, "'", "'')
verkade ditt förslag funka Engine.
Finns det ngt sätt att kolla det mot en SQL injection?

Medlem sedan juni 200032 967 inlägg
#5

Ersättningen tar hand om SQL-injections.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)