Avatar billede stivert.dk Nybegynder
31. maj 2000 - 15:29 Der er 8 kommentarer

Kunne dette login script gøres bedre ?!?

Kunne dette login script gøres bedre ?!?

---------------Login.asp----------------

<%


if Request.Form("action") = "Login" then

password = Request.Form("password")
username = Request.Form("username")
Session("username") = username

set rs = Server.CreateObject("ADODB.Connection")
rs.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("sub.mdb") & ";DriverId=25;FIL=MS Access"

sqlLogin="select Id from seb where (seb='"& username &"') AND (pwd='"& password &"')"
Set userSet = rs.Execute(sqlLogin)
If  Not (userSet.BOF Or UserSet.EOF) then
Session("usrID") = userSet("Id")

Response.Redirect "subopdater.asp"

else

Response.Redirect "login.asp?action=fejl"
End if

rs.Close
Set rs = Nothing

end if
%>
<HTML>
<HEAD>
<style type="text/css">
<!--
.text {  font-family: Arial; font-size: 8pt; font-weight: bold; color: #000000; border: #000000; border-style: solid; border-top-width: thin; border-right-width: thin; border-bottom-width: thin; border-left-width: thin; background-color: #CCCCCC}
-->
</style>
</HEAD>
<body bgcolor="DimGray" leftmargin="0" topmargin="0">

<form method="post" action="login.asp" name="login">
    <font face="Arial" size="2" color="#FFFFFF">Indtast dit brugernavn og password </font>
  <% if Request("action") = "fejl" then %>
  <font face=Arial color="LightGoldenrodYellow"><b><br>Der
  opstod en fejl, der er enten fejl i brugernavn eller password.</b><br></font>
  <% end if %>
  <table width="148" border="0" cellspacing="0" cellpadding="0" height="44">
    <tr>
      <td width="71"><font face="Arial" size="2" color="#FFFFFF">Brugernavn</font></td>
      <td width="77">
        <input type="text" class="text" name="username" size="10">
      </td>
    </tr>
    <tr>
      <td width="71" height="9" valign="top"><font size="2" color="#FFFFFF" face="Arial">Password</font></td>
      <td width="77" height="9" valign="top">
        <input type="password" class="text" name="password" size="10">
      </td>
    </tr>
  </table>
  <input type="submit" name="action" value="Login">
</form>
<p>&nbsp; </p>
</BODY>
</HTML>

---------------login.asp---------------
Avatar billede stivert.dk Nybegynder
31. maj 2000 - 15:30 #1
Og jeg er nybegynder i asp..
Så hvad betyder "If  Not (userSet.BOF Or UserSet.EOF)" ?

Avatar billede nse Nybegynder
31. maj 2000 - 15:31 #2
Hvordan bedre????
Avatar billede fumes Nybegynder
31. maj 2000 - 15:38 #3
Systemet er da OK..

linien du referer til betyder:

Hvis IKKE (userset.BeginOfFile or userset.EndOfFile)

Altså hvis der ER en record....

Dvs. efterfølgende linie bliver udført hvis der er kommet en record ud af dit sql statement - og else bliver udført hvis der ikke er en record..
Avatar billede phylox2 Nybegynder
31. maj 2000 - 16:50 #4
Ja, jeg syntes også, at det ser godt nok ud!
Avatar billede cyigen Nybegynder
01. juni 2000 - 15:12 #5
Disse linier betyder:

If  Not (userSet.BOF Or UserSet.EOF) then

/Her skal scriptet være hvis det ikke er et tom recordset

else

/Her skal der scriptet være til hvis det var et tomt recordset eller det ikke lykkedes et eller andet så skal det stå her!!

End if 

/End if står for at den slutter det der If som du har startet der øver!
Avatar billede mawtex Nybegynder
01. juni 2000 - 23:34 #6
Det kan gøres bedre, men i høj grad mere sikkert - du begår en klassisk brøler: Du tager input fra en anonym bruger og bøffer direkte videre til en kommandofortolker.

Hvad ville der ske hvis jeg angiver følgende som hhv. brugernavn og kode:
' or 'a'='a
' or 'a'='a

Så får du følgende WHERE klausul:
(seb='' or 'a'='a') AND (pwd='' or 'a'='a')

Det vil til enhver tid være sandt. Eksisterer der blot én bruger er jeg inde. Ovenstående kan desuden krydres lidt. Hvis jeg ved at der findes en ”admin” bruger kan jeg skrive:
admin
' or 'a'='a

Og jeg er inde som ”admin”

Jeg har følgende kommentarer:

1. Check inddata. Forventer du et tal, så type-check det. Forventer du strenge, så vær sikker på at brugeren ikke kan ”bryde ud”. Replace( strInput, ”’”, ”’’” ) er den hurtige fix.

2. Brug "stored procedures". Hvis du leverer data via parameter-objekter er ovenstående sikkerhedshul lukket.

3. Ved mindre der er tale om et hobbyprojekt, bør ASP ikke indeholde sikkerhedslogik el.l. Kod komponenter. Ideelt set bør ASP-kun være 3 linier. Opret objekt, kald objekt, dealloker objekt. Hård kost, men det kører hurtigt.

4. Når du bruger sessions-variable kan din løsning ikke skalere over flere servere. Session-objektet bruger også en del ressourcer. Hvis du regner med mange brugere, er Session-variable bandlyst.

5. Din Access-fil ligger i samme mappe som dit ASP-script. Dvs. jeg kan hente den ned via min browser. Så har jeg alle brugernavne og kodeord. Læg ALDRIG en følsom Access-fil i en ”offentlig mappe”

6. Du lukker ganske flot for din forbindelse med rs.Close og Set rs = Nothing – de bliver bare aldrig kaldt!!!


Tænk dig grundigt om mht. bruger-input og SQL. En SQL-sætning kan temmelig meget. Se f.eks. følgende eksempel:

objDbConn.Execute(”SELECT x FROM y WHERE id=” & Request(”id”))

Hvis dette kører på en SQL-server med SA-kontoen (hvad er kutyme blandt ASP-kodere der laver ovenstående nummer) vil følgende URL-kald lukke SQL-Serveren ned:

Somefile.asp?id=1%01SHUTDOWN+WITH+NOCHECK

Vær opmærksom på sikkerheden.

Avatar billede mawtex Nybegynder
01. juni 2000 - 23:36 #7
Jeez - hvem har kodet det her site... Det ænder min gnyffer. Det jeg mente var to tomme gnyffer - nedenfor samlet i gåseøjne:

(seb=" or 'a'='a') AND (pwd=" or 'a'='a')
Avatar billede phylox2 Nybegynder
21. september 2000 - 15:42 #8
Kan vi få en afslutning på dette spørgsmål?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester