Just nu i M3-nätverket
Gå till innehåll

'or''=' problem med MS Access


Payman

Rekommendera Poster

Efter vidare kontroller så verkar det vara relaterat till IE. I Firefox funkar det inte.

 

Hej.

 

Jag har precis blivit uppmärksammad på en säkerhetsrisk med MS Access (jag antar att det är ett dB-problem) där man kan logga in som admin bara genom att skriva 'or''=' i lösenordsraden.

Jag lyckas göra det genom min hemsida vilket inte är så bra.

 

Nu kanske detta varit känt sen länge men tyvärr inte hos mig. Vet nån hur man fixar till detta så det inte funkar längre.

 

Händer det massa annat när man använder denna sträng?

 

MVH

 

Payman

 

[inlägget ändrat 2008-03-22 12:35:39 av Patrick Arkley (www.say-no.se)]

Länk till kommentar
Dela på andra webbplatser

I vilket skriptspråk är webbsidan skapad?

 

Du måste hur som helst se till att indata säkras mot bla. SQL Injection (vilket 'or''=' är). Det minsta du skall göra är att ta bort skadlig kod/tecken från indata.

 

Antar att det är asp eftersom du använder access...

Exempel för att ta bort enkel- och dubbelfnuttar:

Function sqlTxt(str)
 str=Trim(str)
 str=Replace(str, "'", "")
 str=Replace(str, """", "")
 sqlTxt=str
End Function

strUserName = sqlTxt(Request.Form("username"))
strPassword = sqlTxt(Request.Form("password"))

strSQL = "SELECT id FROM tblUsers WHERE user_name='"& strUserName &"' AND pass_word='"& strPassword &"'"

Men helst så ska du titta på parameteriserade frågor, se t.ex:

http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&IID=d628e96e-f8fd-44ed-9537-4061c817e9b1

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Visst är det access och asp. Men varför kan Firefox hanteradet (genom att inte tillåta access)?

 

JAg ska kolla länken. Du menar alltså att jag behöver applicare ditt förslag på inloggningsskriptet? Övriga db-frågor spelar det väl ingen roll på eftersom det inte handlar om inloggning.

 

/Payman

 

Länk till kommentar
Dela på andra webbplatser

Men varför kan Firefox hanteradet
Antagligen för att FF gör någon form av htmlencode innan det skickas, men jag vet faktiskt inte utan att titta närmare.

 

Du menar alltså att jag behöver applicare ditt förslag på inloggningsskriptet?
Ja det är som sagt det absolut minsta. Bättre som sagt att parametisera. T.ex:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% IF Request.Form("action")<>"login" THEN %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>LOGIN</title>
</head>
<body>
<FORM action="?" method="post">
 <p>Användarnamn:<br>
 <input type="text" size="30" name="username" style="font-size: 8pt; font-family: verdana"></p>
 <p>Lösenord:<br>
 <input type="password" size="30" name="password" style="font-size: 8pt; font-family: verdana"></p>
 <p><input type="submit" value="Logga in"></p>
 <input type="hidden" name="action" value="login">
</FORM>    
</body>
</html>
<%
ELSE
 strUsername=Trim(Request.Form("username"))
 strPassword=Trim(Request.Form("password"))

 strDBFilePath=Server.MapPath("../../../datafiles/eforumTester.mdb")  
 connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&strDBFilePath

 Set Conn = Server.CreateObject("ADODB.Connection")
 Conn.Open connString
 Set cmd = server.createobject("ADODB.command")
 cmd.activeConnection = conn
 SQLStmt = "SELECT id, firstName, lastName FROM tblUsers WHERE (user_name=? AND pass_word=?)"
 cmd.CommandText = SQLStmt
 Set objRS = cmd.Execute (, array(strUsername, strPassword))
 If objRS.eof then
   Response.Write("Felaktig inloggning!")
 ELSE
   Response.Write("Välkommen "&objRS("firstName")&" "&objRS("lastName")&"!")
 End if
 objRS.close
 Set objRS = Nothing
 Set cmd = Nothing
 conn.close
 Set conn = Nothing
END IF
%>

 

Övriga db-frågor spelar det väl ingen roll på eftersom det inte handlar om inloggning.
ALL indata, var sig det är formulär eller querystrings (variabler i adressfältet), skall betraktas som potentiellt skadliga. Alltså bör du använda parametiserade frågor överallt där en besökare kan mata in data till en sql-fråga. Din databas är lika sårbar vare sig det är en inloggning eller någon annan databasfråga.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

 

[inlägget ändrat 2008-03-22 14:58:53 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...