webForumDet fria alternativet

Varför måste man skilja på små och stora bokstäver?

ASP

21 svar · 573 visningar · startad av Dashi

Medlem sedan jan. 2005296 inlägg
Frågan#1

Har en inloggning på en asp sida, med en databas, den kollar lösenordet och användarnamnet i databasen, men problemet är att om jag skapar en användare som t.ex är: Test då måste jag logga in med stort T eftersom det står med stort T i databasen, funkar inte annars att logga in, hur gör jag för att den ska logga in även om jag skriver Test eller om jag skriver test??

Mvh //Darek

Medlem sedan apr. 20022 743 inlägg
#2

När du jämför värderna så gör du om alla bokstäver till stora med UCase() eller till små med LCase, vilket spelar ingen roll det får du avgöra själv.

If UCase(strUser1) = UCase(strUser2) Then
Medlem sedan jan. 2005296 inlägg
#3

Poffe skrev:

När du jämför värderna så gör du om alla bokstäver till stora med UCase() eller till små med LCase, vilket spelar ingen roll det får du avgöra själv.

If UCase(strUser1) = UCase(strUser2) Then

fattar inte :P om det ser ut såhär var ska den raden sitta?

<% Dim RS, Conn, SQL, Anv, Passwd

Anv = Replace(Trim(Request.Form("Anv")),"'","")
Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

If Anv = "" Or Passwd = "" Then

Response.Redirect("inloggning.asp")

End If
 
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
Conn.Open "DSN=kopplingsnamn"

SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"
RS.Open SQL, Conn, 0, 1

If RS.EOF = TRUE Then

RS.Close 
Conn.Close

Response.Redirect("inloggning.asp")

Else

If Anv = RS("User") AND Passwd = RS("Losen") Then

Session.Timeout = 20
Session("UserId") = RS("ID")

RS.Close
Conn.Close

Response.Redirect("doldsida.asp")

Else

RS.Close 
Conn.Close

Response.Redirect("inloggning.asp")

End IF

End If %>
Medlem sedan juni 20019 519 inlägg
#4
SQL = "SELECT * FROM tabellnamn WHERE ucase(User) = '" & ucase(Anv) & "' AND ucase(Losen) = '" & ucase(Passwd) & "'"

varför ska den inte vara Case sensitivty... iallafall på lösenordet... ger mer särkerhet ju

kan också lägga in den på rad:

If ucase(Anv) = ucase(RS("User")) AND ucasePasswd) = ucaseRS("Losen")) Then

istället...

Medlem sedan jan. 2005296 inlägg
#5

voigtann1 skrev:

SQL = "SELECT * FROM tabellnamn WHERE ucase(User) = '" & ucase(Anv) & "' AND ucase(Losen) = '" & ucase(Passwd) & "'"

varför ska den inte vara Case sensitivty... iallafall på lösenordet... ger mer särkerhet ju

kan också lägga in den på rad:

If ucase(Anv) = ucase(RS("User")) AND ucasePasswd) = ucaseRS("Losen")) Then

istället...

Vet ej, testanvändare som testat sidan tyckte det va jobbigt för dom registrera sig sedan testa dom logga in, så funka inte det.. och dom tyckte det va skitjobbigt, och sa att dom aldrig skulle tänka sig att logga in på den sidan.. då överlever dom hellre utan.. och vill inte att mina vanliga användare ska tänka så, och eftersom det är en webshop så vill jag helst inte skrämma iväg kunder..

Medlem sedan apr. 20022 743 inlägg
#6

De flesta har ju så att på användarnamnet spelar det ingen roll om det är stora eller små bokstäver men att det ska vara det på lösenordet.

Varför kollar du om man skrivit in rätt användarnamn och lösenord två gånger? En gång i SQL-frågan och en gång med en if-sats.

Jag hade nog skrivit nått sånt här

Anv = Replace(Trim(Request.Form("Anv")),"'","")
Passwd = Replace(Trim(Request.Form("Passwd")),"'","")
bolOK = False

If Len(Anv) > 0 And Len(Passwd) > 0 Then
	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.Open "DSN=kopplingsnamn"
		Set RS = Conn.Execute("SELECT ID FROM tabellnamn WHERE UCase(User) = '" & UCase(Anv) & "' AND Losen = '" & Passwd & "'")
			If Not RS.EOF Then
				Session.Timeout = 20
				Session("UserId") = RS("ID")
				bolOK = True
			End If
		RS.Close: Set RS = Nothing
	Conn.Close: Set Conn = Nothing
End If

If bolOK Then
	Response.Redirect("doldsida.asp")
Else
	Response.Redirect("inloggning.asp")
End If

Gör samma sak men med lite mindre kod.

Medlem sedan maj 20018 027 inlägg
#7

Dashi skrev:

testanvändare som testat sidan tyckte det va jobbigt för dom registrera sig sedan testa dom logga in, så funka inte det.. och dom tyckte det va skitjobbigt, och sa att dom aldrig skulle tänka sig att logga in på den sidan.. då överlever dom hellre utan.. och vill inte att mina vanliga användare ska tänka så, och eftersom det är en webshop så vill jag helst inte skrämma iväg kunder..

Min reflektion över det hela, är att om det är en webshop, borde väl kunderna vara måna om säkerheten, så ingen annan beställer en massa saker i deras namn. Men det kanske går att ordna säkerheten på något annat vis? Det är ju långt ifrån alla webshoppar som kräver inloggning.

Medlem sedan jan. 2005296 inlägg
#8

men grejen e det.. om jag nu fixar till detta då kommer nästa problem, eftersom när man loggar in så kollar den på alla sidor som är ``skyddade´´ om sessionen stämmer överens med querystringen.. och där blir det problem.. ID.et är användarnamnet, så har man reggat användarnamn Test så blir sessionen = Test och använder jag då ucase så blir resultatet följande:

If Not Test = TEST och det leder till att man bli skickad till error sidan :)

<%
anv = Replace(Request.QueryString("ID"), "'", "''")
       
If NOT Session("UserId") = anv Then

Response.Redirect "error.asp?Fel=4"
End If
%>
Medlem sedan apr. 20022 743 inlägg
#9

Varför skickar du med användarnamnet i en querystring?

För att jämföra måste du ju självklart formatera om båda strängarna till stora bokstäver

If NOT UCase(Session("UserId")) = UCase(user) Then
Medlem sedan jan. 2005296 inlägg
#10

Poffe skrev:

Varför skickar du med användarnamnet i en querystring?

För att jämföra måste du ju självklart formatera om båda strängarna till stora bokstäver

If NOT UCase(Session("UserId")) = UCase(user) Then

oki så de går formantera om sessionen då? för jag trodde att det inte gick.. pga den delen av sql-injections som man använder sig genom url:n asså t.ex att om man nu skulle skriva in inloggning.asp?anv=Nisse så kommer man inte in pga att sessionen inte är nisse då, och sessionen nisse skapas endast vid en lyckad inloggning av användaren Nisse.. :P

Medlem sedan apr. 20022 743 inlägg
#11

Men du hämtar ju värdena för inloggningen via form inte querystring, alltså kan man ju inte logga in genom att skriva inloggning.asp?anv=Nisse. Även om du skulle använda querystrings måste man ju ha rätt lösenord för att logga in också.

Medlem sedan jan. 2005296 inlägg
#12

nepp de e just det inte behövs.. på login.asp skriver du in värden, dom kollas där, efter det är rätt skickas du till inloggning.asp och får då en url som ser ut typ såhär.. inloggning.asp?anv=test&passwd=test på inloggning.asp ligger ingen databas chekning, inte heller på dom andra sidorna som där finns länkar till på inloggning.asp och därför måste jag då skicka dom vidare med querystring.. och därför kollas sessionen och querystringen.. , för tidigare kunde man bara skriva in inloggning.asp?anv=Nisse så kom man in och kunde ändra alla uppgifter o.s.v

Medlem sedan apr. 20022 743 inlägg
#13

Men du ska ju bara kolla användarnamn och lösenord en gång. Om de stämmer så skapas en session och för att kolla om man är inloggad kollar du om rätt session finns. Du behöver inte kolla värdet på varje sida.

Medlem sedan jan. 2005296 inlägg
#14

Poffe skrev:

Men du ska ju bara kolla användarnamn och lösenord en gång. Om de stämmer så skapas en session och för att kolla om man är inloggad kollar du om rätt session finns. Du behöver inte kolla värdet på varje sida.

jo för kolla här, om jag går in på ändra uppgifter (andrauppg.asp) så finns där en tabell som kollar databasen med recset efter värden som sätts in i tabellen, och den kollar olika i databasen för varje användare, så skriver man då andrauppg.asp?anv=Nisse så skulle man få uppgifter om Nisse..

Medlem sedan apr. 20022 743 inlägg
#15

Men du har ju användarnamnet i en session, jämför med den i stället för querystringen.

Medlem sedan jan. 2005296 inlägg
#16

installningar.asp:

<% anv = Replace(Request.Querystring("anv"), "'", "''") %>
<a href="andrauppg.asp?anv=<%=anv%>" target="main">&Auml;ndra 
          Uppgifter</a>

andrauppg.asp:

        <%
anv = Cstr(Request.Querystring("anv"))
		  
Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(databas)

Visa = "SELECT * FROM tabellnamn WHERE anv = '" & Replace(anv, "'", "''") & "' ORDER BY anv" 
RS.Open Visa, conn, adOpenStatic, adLockOptimistic %>

om jag ändå bytar ut till:

<% anv = Replace(session("vem"), "'", "''") %>
anv = Cstr(session("vem"))

så kan man ändå skriva då andrauppg.asp?anv=Nisse och få information om denna..

Medlem sedan apr. 20022 743 inlägg
#17

Det räcker ju med att du skriver så här i andrauppg.asp

<%
anv = Cstr(session("vem"))
		  
Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(databas)

Visa = "SELECT * FROM tabellnamn WHERE anv = '" & Replace(anv, "'", "''") & "' ORDER BY anv" 
RS.Open Visa, conn, adOpenStatic, adLockOptimistic %>

Varför hålla på och skicka värdet genom querystrings när det redan finns i sessionen?

Medlem sedan jan. 2005296 inlägg
#18

men det gör ju inget ifs om jag kör detta jag kör, blir ju inte negativt på något sätt?

Medlem sedan apr. 20022 743 inlägg
#19

Som vi sagt tidigare, du får självklart göra precis som du själv vill.

Medlem sedan jan. 2005296 inlägg
#20

Poffe skrev:

Som vi sagt tidigare, du får självklart göra precis som du själv vill.

nene mena inte så, det va en fråga asså, väntade mer mig ett svar att sidan blir snabbare eller nåt eftersom jag har mindre kod då :) för det är det enda positiva jag kom på med det.. därför jag undra om du kom på något mer som va positivt med det..
men sen så blir det ändå en negativ grej med att köra de med sessioner.. vi tar ett litet dumt exempel hehe :)

vi säger jag har en hata Poffe klubb, hehe, och så skriver jag i installningar.asp dom länkarna som finns där och under det skriver jag Rule For Hata Poffe, och så vill inte jag att du ska se det, du är inte inloggad och går in på installningar.asp då ser du alla länkar och all text på sidan.. och då blir den ändå inte skyddad ju och sedan när du går in på andrauppg.asp så kommer en sidan kunde inte visas sida upp, innan va det ju att om man kom in på dom sidorna och inte va inloggad så fick man endast se Du Har Ej Behörighet Till Denna Sida!

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)