Hej! Första inlägget här, så fan om ni inte välkomnar mig med öppna armar! :birp
(kanske ska påpeka att jag har sökt runt lite snabbt här på forumet, men utan resultat)
Till problemet som jag vet inte är så avancerat för er experter, men dock så knepigt för mig som inte pysslar med kodning av ASP på daglig basis.
Jag försöker fixa till så olika användare har olika behörighetsnivåer ( guest, user, admin) dvs tre olika nivåer. Så tex om en "user" är inloggad så kan han inte komma åt en viss information på index_start.asp som "admin" kan, men i sin tur så skall "admin" kunna se både informationen som "guest" och "user" kan, är ni med på vad jag menar? Skulle det vara så att det är mycket lättare/bättre att koda med endast "user" och "admin" så är det helt ok, "guest" ville jag endast ha bara för att kunna skriva tex "du är endast gäst här så för att komma åt mer information kontakta administratören"
Jag har en kod redan som kanske går att slänga om lite i så det funkar med dem olika behörighetsnivåerna?
1. Först en inloggningssida som heter index.asp där man fyller i användarnamn osv inga konstigheter där.
2. När man har fyllt i sinda uppgifter kommer man till index_check.asp som ser ut så här:
<title>Inloggning</title>
<body>
Administration
<%
if request.querystring("status") <> "check" then
response.redirect("fel.asp")
end if
if request.querystring("status") = "check" then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db_ver1.0.mdb")
SQL = "SELECT anvandarnamn, losenord FROM administration " & _
"WHERE anvandarnamn = '"&request.form("anvandarnamn")&"' AND " & _
"losenord = '"&request.form("losenord")&"' "
Set RS = Connect.Execute(SQL)
if RS.eof then %>
Fel användarnamn och lösenord!
<% else
session("inloggad") = true %>
<% Response.Redirect "index_start.asp" %>
<% end if
end if
Connect.close
Set Connect = nothing
Set RS = nothing
%>
</td>
</tr>
</table></td>
</tr>
</table>
3. Är användarnamn osv ok så skickas man till index_start.asp som har index_include.asp includerat i sig för att kolla så allt står rätt till.
<!-- #include file = "index_include.asp" -->
<title>Inloggning</title>
<body>
Administration
<br />Du är nu Inloggad!</td>
"index_include.asp"
<%
if session("inloggad") <> true then
response.redirect("fel.asp")
end if
%>
Enklast möjliga är att du lägger till en kolumn i din användartabell där behörigheten anges. Vid lyckad inloggning lagrar du värdet från denna kolumn i Session, och kan därefter kontrollera användartypen när du vill.
OBS! Din inloggning går att hacka på 0.1 millisekunder. Du MÅSTE ersätta enkelfnuttar i SQL-frågan med dubbla enkelfnuttar...
Annars kan man logga in genom att t.ex ange lösenordet:
' OR ''='
Sök på "SQL Injection" så kommer du att hitta mer om problemet. Det gäller inte bara inloggningar utan alla SQL-frågor som körs med användarstyrda argument.
Enklast möjliga är att du lägger till en kolumn i din användartabell där behörigheten anges. Vid lyckad inloggning lagrar du värdet från denna kolumn i Session, och kan därefter kontrollera användartypen när du vill.
Precis, men hur ser en sådan kod ut?
emission skrev:
OBS! Din inloggning går att hacka på 0.1 millisekunder. Du MÅSTE ersätta enkelfnuttar i SQL-frågan med dubbla enkelfnuttar...
Tackar för den kodsnutten och varningen, ska kolla lite närmare på det här med SQL Injection.
<title>Inloggning</title>
<body>
Administration
<%
if request.querystring("status") <> "check" then
response.redirect("fel.asp")
end if
if request.querystring("status") = "check" then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db_ver1.0.mdb")
SQL = "SELECT anvandarnamn, losenord,behorighet FROM administration " & _
"WHERE anvandarnamn = '"&replace(request.form("anvandarnamn"),"'","''")&"' AND " & _
"losenord = '"&replace(request.form("losenord"),"'","''")&"' "
if RS.eof then %>
Fel användarnamn och lösenord!
<% else
session("inloggad") = true
session("behorighet") = RS("behorighet")
%>
<% Response.Redirect "index_start.asp" %>
<% end if
end if
Connect.close
Set Connect = nothing
Set RS = nothing
%>
</td>
</tr>
</table></td>
</tr>
</table>
Sen hur skriver jag ut informationen i sin tur på index_start.asp ?
Jag hittade detta, men jag vet inte om det funkar.
Det är strängvärden du kontrollerar, och det finns ingen VBScript-funktion som heter "Hej", så:
<% select case session("behorighet")
case "user"
%>Hej användare.<%
case "admin"
%>Hej administrator.<%
end select %>
<br />Du är nu Inloggad!</td>
Nu är jag inte med, vart ska Set RS = Connect.Execute(SQL) in? får bara felmeddelanden hela tiden.. =/ Som jag skrev innan så är jag nybörjare så jag hoppas du har överseende med att jag ställer så konstiga frågor, men jag vill lära mig!. =)
Hur gör jag för att sätta en session på användarnamnet? är det så enkelt som jag har gjort i exemplet nedan? Hur skriver jag ut det sedan < % session bla bla "anvandarnamn" %> ???
<%
if request.querystring("status") <> "check" then
response.redirect("fel.asp")
end if
if request.querystring("status") = "check" then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("../../db/db_ver1.0.mdb")
SQL = "SELECT anvandarnamn, losenord, behorighet FROM administration " & _
"WHERE anvandarnamn = '"&replace(request.form("anvandarnamn"),"'","''")&"' AND " & _
"losenord = '"&replace(request.form("losenord"),"'","''")&"' "
Set RS = Connect.Execute(SQL)
if RS.eof then %>
Fel användarnamn och/eller lösenord!
<% else
session("inloggad") = true
session("behorighet") = RS("behorighet") session("anvandarnamn") = RS("anvandarnamn")
%>
<% Response.Redirect "../_medlemszon/" %>
<% end if
end if
Connect.close
Set Connect = nothing
Set RS = nothing
%>
Om jag vill plocka fram projekt som enbart tillhör Tex "MadMange" som ligger i "skribent" kolumnen från "nyhetartikel" tabellen hur gör jag då? (hmm vet inte riktigt om ens jag fattade vad jag just skrev =/ )
Saken är den att man loggar ju in med användarnamn o lösenord och användarnamnet sparas ju i en session och då vill jag kuna plocka ut bara dom projekten som det användarnamnet tillhör, jag vill ju inte att tex "Kalles" projekt ska visas... hoppas ni förstår, annars får jag försöka förklara bättre.
Mycket kod/sorry :r
<%Response.Buffer=True
Session.Lcid = 1053
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../db/db_ver1.0.mdb")%>
<%If Request.QueryString("do") = "" Then%>
<%If Request.Querystring("action")= "" Then%>
<%Set RecSet = Server.CreateObject("ADODB.Recordset")
Const perSida1 = 50
Sidan = Request.QueryString("sida")
If Sidan = "" then
sida = 1
Else
sida = Sidan
End If
With RecSet
.CursorLocation = 3
.CacheSize = perSida1
End With
SQL = "SELECT * FROM nyhetartikel WHERE typ = 'projekt' ORDER BY DATUM DESC"
RecSet.Open SQL, Conn
If RecSet.EOF Then%>
Här var det tomt..
<%Else%>
<%With RecSet
.MoveFirst
.PageSize = perSida1
.AbsolutePage = sida
End With
Sidor = RecSet.PageCount
Count = 0
Do While Not RecSet.EOF And Count < RecSet.PageSize%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="14%"><%=FormatDateTime(RecSet("Datum"),2)%></td>
<td width="9%"><%=RecSet("typ")%></td>
<td width="71%">
<%If Len(RecSet("rubrik")) > 50 Then%>
<%=Left(RecSet("rubrik"),50)%>...
<%Else%>
<%=RecSet("rubrik")%>
<%End If%>
</td>
<td width="6%"><div align="right"><a href="admin_ny_art_akt_projekt.asp?action=change&id=<%=RecSet("id")%>" title="Ändra">Ä</a> <a href="admin_ny_art_akt_projekt.asp?action=delete&id=<%=RecSet("id")%>" title="Ta bort" onClick="return confirm('Radera <%=RecSet("rubrik")%> ur databasen?');">R</a></div></td>
</tr>
</table>
<%Count = Count + 1
RecSet.MoveNext
Loop
If Sidor > 1 Then%>
<br>
Sida:
<%If Sidor <> 1 Then
For Sid = 1 To Sidor
If (Int(Sid)) = (Int(sida)) Then%>
<font color="#ff0000"><%=Sid%></font>
<%Else%>
<a href="admin_ny_art_akt_projekt.asp?sida=<%=Sid%>"><%=Sid%></a>
<%End If%>
<%Next%>
<%End If
End If%>
<%If Session("mess") <> "" Then%>
<%
Response.Write Session("mess")
Session("mess") = ""
%>
<%End If%>
<br> <br> <a href="admin_ny_art_akt_projekt.asp?action=add"><font color="#000000"><font color="#996633">»</font></font>
Lägg till ett projekt</a>
<%RecSet.Close
Set RecSet = Nothing
End If
End If
If Request.Querystring("action") = "add" Then%>
<p></p>
<table width="100%" cellpadding="0" cellspacing="0">
<form method="post" action="admin_ny_art_akt_projekt.asp?action=spara" name="texten">
<tr>
<td><b>Projektets namn:</b><br> <input type="text" name="rubrik" style = "width: 100%; margin-top: 2px; margin-bottom: 2px;" size="50"></td>
</tr>
<tr>
<td> <b>Typ:</b><br> <select name="typ" size="1">
<option value="projekt">projekt</option>
</select> </td>
</tr>
<tr>
<td><b>Text:</b> <font color="#FF0000">(Bilder som infogas i
texten får vara MAX 590 pixlar bred)</font><br> <textarea cols="85" rows="20" name="texten" style = "width: 100%; margin-top: 2px; margin-bottom: 2px;"></textarea></td>
</tr>
<tr>
<td><input type="Submit" name="andra" value="Lägg till"></td>
</tr>
</form>
</table>
<%End If
If Request.Querystring("action")= "change" Then
Set RecSet = Conn.Execute("SELECT * FROM nyhetartikel WHERE id="& Request.Querystring("id"))%>
<table width="100%" cellpadding="0" cellspacing="0">
<form method="post" action="admin_ny_art_akt_projekt.asp?action=andrat&id=<%=Request.Querystring("id")%>" name="texten">
<tr>
<td><b>Projektets namn:</b><br> <input name="rubrik" type="text" id="rubrik" style = "width: 100%; margin-top: 2px; margin-bottom: 2px;" value="<%=RecSet("rubrik")%>" size="50"></td>
</tr>
<tr>
<td>
<%
Function IsSelected(strUno, strDos)
strUno = LCase(trim(strUno))
strDos = LCase(trim(strDos))
If strUno = strDos Then IsSelected = " selected=""selected"""
End Function
%>
<b>Typ:</b><br> <select name="typ" size="1">
<option value="projekt"<%= isSelected(RecSet("typ"), "projekt") %>>projekt</option>
</select> </td>
</tr>
<tr>
<td><b>Datum:</b> <font color="#FF0000">(Datumet måste skrivas
enligt följande format: "2003-12-08 16:58:00")</font><br>
<input type="text" name="datum" size="50" style = "width: 100%; margin-top: 2px; margin-bottom: 2px;" value="<%=RecSet("datum")%>"></td>
</tr>
<tr>
<td><b>Text:</b> <font color="#FF0000">(Bilder som infogas i
texten får vara MAX 590 pixlar bred)</font><br> <textarea name="texten" cols="85" rows="20" id="texten" style = "width: 100%; margin-top: 2px; margin-bottom: 2px;"><%=RecSet("texten")%></textarea></td>
</tr>
<tr>
<td><input type="Submit" name="andra" value="Utför ändringar"></td>
</tr>
</form>
</table>
<%RecSet.Close
Set RecSet = Nothing
End If
If Request.Querystring("action")= "spara" Then
Rubrik = Replace(Request.Form("rubrik"), "'", "''")
Typ = Replace(Request.Form("typ"), "'", "''")
Texten = Replace(Request.Form("texten"), "'", "''")
Conn.Execute("INSERT INTO nyhetartikel(rubrik,typ,texten) VALUES('" & rubrik & "', '" & typ & "','" & texten & "')")
Response.Redirect "admin_ny_art_akt_projekt.asp"
End If
If Request.Querystring("action") = "andrat" Then
Rubrik = Replace(Request.Form("rubrik"), "'", "''")
Typ = Replace(Request.Form("typ"), "'", "''")
Texten = Replace(Request.Form("texten"), "'", "''")
Datum = Replace(Request.Form("datum"), "'", "''")
Conn.execute("Update nyhetartikel Set Rubrik='" & rubrik & "', Typ='" & typ & "', Texten='" & texten & "', Datum='" & datum & "' Where id = "& Request.Querystring("id"))
Response.Redirect "admin_ny_art_akt_projekt.asp"
End If
If Request.Querystring("action") = "delete" Then
Conn.Execute("Delete From nyhetartikel Where id="& Request.Querystring("id"))
Response.Redirect "admin_ny_art_akt_projekt.asp"
End If
End If
Conn.Close
Set Conn = Nothing%>
Det är ju strålande! Nu är det bara en sak som återstår och det är att när man "lägger till ett projekt" så vill jag att när man för in informationen i databasen så ska "användarnamnet" automatiskt läggas till i "skribent" kolumnen, hur gör jag då? en dold option value eller nått? .. Man ska alltså inte kunna skriva in användarnamnet själv, för då kan jag ju tex skriva fel och då hamnar kan jag ju inte se den. är ni mer? ;)
mjo jag försöker men det är inte så lätt med alla konstiga tecken, det är som rena kinesiskan för mig ;)
Men jag ska fortsätta prova så får vi se.. hehe
Tack så hemskt mycket i alla fall för det hjälpen jag har fått!! :birp