Titta på din kod och försök gissa vad som händer om någon loggar in med användarnamn:
admin
och lösenord:
' OR '1'='1
5 svar · 425 visningar · startad av l-boy
Driver på fritiden en hemsida (http://www.lsk.se) och i fredags morse lyckades en hacker (HACKED BY SCORPIONHACKERS SECURITY TEAM) tränga sig in och radera en del viktig information. Inte hela världen, backup finnes. Men jag vill så klart inte att det här skall hända i framtiden. Säkerheten på sidan har inte varit den bästa, och det är jag fullt medveten om. Har inte heller brytt mig om det då det inte känts speciellt troligt att någon ens skulle bry sig om att göra ett intrång. Skulle vara tacksam om någon kunde se över nedanstående kod och komma med tips och förslag på vad som kan göras bättre;
Jag vet att nedanstående kod är rätt så usel och jag har lärt mig en hel massa sedan jag skrev nedanstående och håller på med en ny version. Men det kan ändå vara bra med lite tips.
I loggen kan jag utläsa att "hackern";
* loggade in med username; admin
<%
If request.querystring("action") = "logout" Then
call log("Lyckad utloggning.",Session("admin_username"),"admin")
Session.abandon
Response.Redirect "/index.asp?link=/admin/admin_login.asp"
End If
If Session("admin_login")="OK" Then
Response.Redirect("/index.asp?link=/admin/admin_main.asp")
End If
If Request.QueryString("action") = "login" Then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ="Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " & admin_db
username = Request.Form("username")
password = Request.Form("password")
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "Select * From admin Where username='"&username&"' AND password='"&password&"'"
RecSet.Open SQL, Connect
If (RecSet.EOF or RecSet.BOF) then
Session("admin_errormessage") = "Fel namn eller lösenord.<BR>"
RecSet.Close
Set RecSet = nothing
Connect.Close
call log("Misslyckat inloggningsförsök. (Lösen="&password&")",username,"admin")
Response.Redirect("/index.asp?link=admin/admin_login.asp")
Else
Session("admin_login") = "OK"
Session("admin_id") = RecSet("Id")
Session("admin_username") = username
Session("admin_signature") = RecSet("Signature")
Session("admin_team") = RecSet("Team")
Session("admin_messageaccess") = RecSet("MessageAccess")
Session("admin_forumaccess") = RecSet("ForumAccess")
Session("admin_gbaccess") = RecSet("GbAccess")
Session("admin_allteamsaccess") = RecSet("AllTeamsAccess")
Session("admin_adminaccess") = RecSet("AdminAccess")
call log("Lyckad inloggning.",Session("admin_username"),"admin")
RecSet.Close
Set RecSet = nothing
Connect.Close
Response.Redirect "/index.asp?link=admin/admin_main.asp"
End If
RecSet.Close
Set RecSet = nothing
Connect.Close
End If
%>
<form name="adminlogin" method="post" action="/admin/admin_login.asp?action=login">
<table align="center" border="0" width="98%" cellpadding="0" cellspacing="0">
<tr>
<td width=100>Användarnamn</td><td><input type="text" name="username" size="20"></td>
</tr>
<tr>
<td>Lösenord</td><td><input type="password" name="password" size="20"></td>
</tr>
<tr>
<td colspan="2"><br><input type="submit" value="Logga in"></td>
</tr>
</form>
<%
If Session("admin_errormessage")<>"" Then %>
<tr>
<td colspan="2"><%Response.Write Session("admin_errormessage") %></td>
</tr>
<%
Session("admin_errormessage") = ""
End If
%>
</table>
Titta på din kod och försök gissa vad som händer om någon loggar in med användarnamn:
admin
och lösenord:
' OR '1'='1
Jo, då blir det problem. Hur kringgår jag det enklast?
Något i stil med;
username = Trim(Replace(Request.Form("username"),"'",""))
password = Trim(Replace(Request.Form("password"),"'",""))
Du ersätter alla ' i username och password med '' (två stycken apostrofer).
Och det ska du göra överallt där information utifrån (cookies, request.form, request.querystring) går in till databasen.
OK, tack för hjälpen!