Hrm - Indrømmet, det er lidt omstændigt, men fidusen er at gemme passwords i
en "oversat" form - og sæt nu en eller anden fik fat i tabellen med usere og
passwords??? (Der er stadig mange folk der bruger det samme password til
alle mulige ting, ikke "bare" din hjemmeside !)
Første tildeling af passwords (foretages f.eks. af administrator ifm. eller
ved oprettelse af bruger):
Password i almindelig tekstform oversættes til en hash-kode (Brugbar ASP
kode:
http://www.frez.co.uk/freecode.htm#md5 ), og gemmes på tabellen med
bruger/pasword
Når en bruger logger på:
Inden der foretages sammenligning mellem det password en bruger har angivet
ved login, og hvad der står på tabellen, konverteres brugerens password med
den samme hash-funktion - så det er hash-værdierne der sammenlignes inden
der gives/nægtes adgang.
Derved sikre du dig 100% imod at der er nogen "opfindsomme" som prøver med
.... OR 1 = 1 eller lignende.
God fornøjelse
Gunnar S. Müller
"Thomas Due" <tdue@mail_remove_.dk> skrev i en meddelelse
news:bodhs5$mjg$1@sunsite.dk...
> René Poulsen[fcpoulsen@hotmail.com] wrote in [<bodg1b$sq$1@sunsite.dk>]:
>
> > Jeg bruger en form hvor man indtaster brugernavn og kodeord og så
> > kontrollerer jeg så i databasen om de passer sammen - gør de det
> > er man så logget ind og gør de ikke er man selvfølgelig ikke
> > logget ind og man får en besked derom.
> >
> > Er det sikkert? Eller kan det nem brydes af hackere eller andre
> > snu mennesker ( ikke fordi jeg forventer at få hacker besøg på
> > min lille side
)???
>
> Det kommer jo lidt an på HVORDAN du gemmer det i databasen, og checker
> det. Hvis du bare laver en
>
> "SELECT * FROM Brugere WHERE (Brugernavn='" & navn & _
> ")' AND (kodeord='" & kodeord & "')"
>
> Så er den ret nem at bryde, og kan vist nok endda resultere i sletning
> af data, hvis "hackeren" kender navnet på en eller flere af dine
> tabeller.
>
> Hvis jeg indtastede følgende i brugernavn og kodeord ville jeg få
> adgang med SQL sætningen ovenover:
>
> ' or '1'='1'
>
> Idet SQL sætningen så kommer til at se således ud:
>
> "SELECT * FROM Brugere WHERE (Brugernavn='' OR '1'='1') AND
> (Password='' or '1'='1')"
>
> Den vil altid returnere noget, og derved vil jeg få adgang.
>
> Endnu værre så kan man ved nogle databaser (MSSQL mener jeg) gøre
> følgende
> Brugernavn: "' or '1'='1';drop table brugere"
>
> Idet nogle databaser opfatter ";" som en kommando separator, og der er
> derfor TO kommandoer der skal udføres.
>
> Den sikre måde at sikre imod denne form for angreb som kaldes SQL
> Injection er at bruge parametre:
>
> ** UTESTET **
>
> Set Cmd = Server.CreateObject("ADODB.Command")
> Cmd.ActiveConnection = DB ' Aktiv connection
> Cmd.CommandText = "SELECT * FROM Brugere " & _
> "WHERE Brugernavn=@navn AND " & _
> "Kodeord=@Pwd"
> Cmd.Parameters.add(Cmd.CreateParameter("@navn", navn))
> Cmd.Parameters.add(Cmd.CreateParameter("@Pwd", kodeord))
> RecordSet = Cmd.Execute
>
> Jeg har ikke testet den ovenstående kode, men den burde give dig en ide
> om hvordan man kan gøre.
>
> --
> Thomas Due
> Software Developer
> Scanvaegt Nordic A/S
> Posted with XanaNews version 1.15.7.4