Søger du en specifik kategori?

 



Oprettet fre. d. 06. februar 2009 kl. 14:03

netro
netro (25.934 point)
Guidens karaktér
1
2
3
4
5

Er dit login-system sikkert?

Artiklen omhandler en ret banal fejl, der dog kan give store problemer.
Når man laver et login-system på en hjemmeside, er det påkrævet at sætte sikkerheden i højsædet. Mange nybegyndere tror fejlagtigt, at deres system er umuligt at bryde. Dog glemmer de oftest en enkelt lille ting, hvilket denne artikel handler om.
Lad os til at starte med betragte et meget simpelt login-system baseret på en Access-database.


<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Driver={MicroSoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database.mdb"))

If Request.ServerVariables("Request_Method") = "POST" Then
 
  Brugernavn = Request.Form("brugernavn")
  Password = Request.Form("password")
 
  SQL = "Select From Tabel Where Brugernavn = '" & Brugernavn & "' And Password = '" & Password & "'"
  Set rs = Conn.Execute(SQL)
 
  If Not rs.EOF Then
      'Brugeren er godkendt
  Else
      'Brugeren er afvist
  End If
End If
%>

<form method="post" action="side.asp">
  <input type="text" name="brugernavn"><br>
  <input type="password" name="password"><br>
  <input type="submit" value="Log ind">
</form>


Grundet et alvorligt sikkerhedshul i ovenstående kode, er det muligt at foretage et såkaldt SQL-attack og logge på som den første bruger, der findes i tabellen uden at kende vedkommendes password.
Ønskes dette, gøres det ganske enkelt ved at indtaste følgende i password-feltet.


' Or 1='1


Og hvad skulle det så bevirke, spørger du muligvis dig selv. Jo, når ovenstående indsættes i SQL-sætningen, manipuleres der faktisk med denne, så forespørgslen til databasen nu ser ud som følger.


SQL = "Select * From Tabel Where Brugernavn = '' And Password = '' Or 1='1'"


Vi stiller nu altså ikke mere betingelsen, at passwordet skal være lig med den indtastede værdi. Blot at det skal være lig med "" ELLER, at 1 skal være det samme som 1, hvilket det jo til enhver tid vil være. Resultatet er, at vi nu har adgang til den første brugers profil, uden at kende hans/hendes password.
Dette er naturligvis meget uheldigt, men løsningen er gudskelov ligeså simpel, som problemet er kritisk. Hele balladen skyldes nemlig den lille single quot ('). Denne skal ved brug i SQL-sætninger erstattes med to af slagsen (''). Dette gøres således.


Brugernavn = Replace(Request.Form("brugernavn"), "'", "''")
Password = Replace(Request.Form("password"), "'", "''")


Og så er dette problem pludselig ikke længere eksisterende.

Et godt eksempel på omtalte sikkerhedshul fandtes på mødestedet ensomikoebenhavn.dk umiddelbart efter, de havde lanceret siden. Dette ses af følgende screenshot.
http://www.opfinderen.dk/images/articles/ensomikoebenhavn.jpg

Har alt dette givet dig lyst til at forbedre sikkerheden i dit system yderligere, kan du f.eks. stille dig selv følgende spørgsmål.

- Sendes brugerens indtastninger i formularen til serveren i plain text (uden kryptering etc.)?
- Kan du downloade din eventuelle Access-database ved at skrive stien i browseren?
- Er serverens software opdateret, og er den opsat sikkerhedsmæssigt korrekt?

Skrevet tor. d. 15. januar 2004 kl. 20:44| #1


Skrevet tor. d. 15. januar 2004 kl. 22:44| #2

tuctoh (17.143 point)
En brugbar artikel, om SQL injektion. Hvis du ikke ved hvad SQL injektion er - skal denne artikel læses!

Skrevet fre. d. 16. januar 2004 kl. 22:44| #3


Skrevet tir. d. 20. januar 2004 kl. 04:05| #4

-sippo- (17.592 point)
Kunne godt bruge lidt mere om sikker hed.
Fks. kryptering af text som du selv nævner.
Men ellers meget god.

Skrevet tir. d. 27. januar 2004 kl. 11:39| #5

karsten_larsen (14.235 point)
En okay artikel - som indfri sin overskrift.

Skrevet lør. d. 31. januar 2004 kl. 15:53| #6

sandbox (50.355 point)
Bør læses! Også relevant for brugere af andre sprog og andre databaser.

Skrevet søn. d. 01. februar 2004 kl. 20:26| #7

squashguy (34.314 point)
Godt at påpege dette! Husk dog at AND har præcedens over OR; hvorfor eksemplet vil logge os ind som den først registrede bruger (som ikke nødvendigvis er Peter)..

Skrevet søn. d. 15. februar 2004 kl. 16:21| #8

kingmedia (20.971 point)
Glimrende artikel, dog synes jeg at man bør nævne, at gi sine formfelter og db felter andre navne end de gængse "user", "username", "bruger", "brugernavn"  osv. :o)

Skrevet ons. d. 18. februar 2004 kl. 15:48| #9


Skrevet man. d. 14. november 2005 kl. 16:38| #10


Skrevet man. d. 24. april 2006 kl. 08:49| #11

cade.dk (16.381 point)
Ikke 5 point værd.

Skrevet tir. d. 13. marts 2007 kl. 17:04| #12


Skrevet tor. d. 24. juli 2008 kl. 19:31| #13

hva skal man bruge det der til
kunne i det menste lave et eksempel på hvordan man overhovet laver et log ind system

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger