|  | 		    
					
        
         
          
         
	
          | |  | Kan man foregive at have en andens session~ Fra : Jakob Munck
 | 
 Dato :  26-06-06 08:54
 | 
 |  | Jeg har for nylig haft indbrud på en site, hvor en person fik adgang til en
 administrations-side, hvor han lavede diverse hærværk. Det var meget
 ubehagelgt og det vil jeg gerne undgå sker igen. Siten var beskyttet med
 denne kode øverst:
 
 ---------------------
 <?php
 session_start();
 if (!isset($_SESSION[webmaster])) {
 header("Location: ikke_logget_ind.php");
 }
 ------------------------
 
 Denne session sættes, når en webmaster (autoriseret person) logger sig ind
 og jeg troede at det ville forhindre, at andre kunne se siten, da denne
 session ikke sættes, når de logger sig ind.
 
 Jeg forsøger at finde ud af, hvordan dette indbrud er lavet, og derfor vil
 jeg godt vide, om der er metoder, hvormed hackere og andre kan "forfalske"
 en session og dermed få adgang til et område, som kræver at denne session
 eksisterer? Forudsætningen er naturligvis, at man kender URL til filen, men
 hvis man gør det, kan man så forfalske en session og dermed få adgang til et
 område, som er beskyttet på ovenstående måde?
 
 Formålet, for mig, med at vide dette, er naturligvis at jeg i fremtiden
 gerne vil sikre mine portaler bedre for at undgå indbrud og hærværk.
 
 v.h.
 Jakob
 
 
 
 
 |  |  | 
  Peter Brodersen (26-06-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  26-06-06 09:17
 | 
 |  | 
 
            On Mon, 26 Jun 2006 09:53:59 +0200, "Jakob Munck" <jm2@webspeed.dk>
 wrote:
 >---------------------
 ><?php
 >session_start();
 >if (!isset($_SESSION[webmaster])) {
 > header("Location: ikke_logget_ind.php");
 >}
 >------------------------
 >
 >Denne session sættes, når en webmaster (autoriseret person) logger sig ind 
 >og jeg troede at det ville forhindre, at andre kunne se siten, da denne 
 >session ikke sættes, når de logger sig ind.
 Der er et par detaljer:
 1. Dit output fortsætter stadigvæk, selv om du har sat denne header.
 Husk at sætte exit() umiddelbart bagefter, ellers bliver den reelle
 webside stadigvæk sendt med (og brugeren kan blot sætte sin browser op
 til ikke at følge din redirect til ikke_logget_ind.php). Derfor: Husk
 at sørge for at afslutte script-afviklingen efter din viderestilling.
 2. Primæsset er rigtigt nok, at en bruger ikke selv kan sætte
 session-værdierne, men der kan være et par undtagelser:
 2.1: Siden giver mulighed for at brugeren selv sætter session-værdier.
 Det kan være, man har en form, der spreder sig over mange sider, og
 blot har noget simpelt kode, der smider alle POST-nøgler/værdier over
 i $_SESSION. Her kan brugeren så selv sende sine egne værdisæt med.
 2.2: Har brugeren et webhotel på samme server, og php-opsætningen ikke
 er sat op til at alle webhoteller deler session-mapper. Du kan læse
 lidt om dette og se et eksempel på http://stock.ter.dk/session.php  .
 Her afhænger det så af dit webhotel.
 3. Brugeren kan rent faktisk være logget ind som webmasteren:
 3.1. Hvis brugeren har gættet et brugernavn og kodeord til
 webmasteren, vil han have adgang. Her kan det være relevant at tjekke
 logfilerne for om han har været forbi en login-side.
 3.2. Hvis brugeren har mulighed for at tilføje HTML på siden (fx hvis
 der er et webforum, der tillader HTML), kan han havde lagt et
 javascript ind, der sender brugerens cookie (og dermed session-id) til
 ham. Hvis en webmaster, der er logget ind, kigger på siden, vil
 webmasterens session-id så blive sendt til brugeren, der blot kan gå
 ind på siden med dette session-id - og nu være logget ind.
 Under alle omstændigheder kan det være relevant at kigge i logfilerne
 for at se, hvilke sider, brugeren har været forbi - fx om han har
 været forbi en login-side eller ej.
 -- 
 - Peter Brodersen
   Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk   Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
  Jakob Munck (26-06-2006) 
 
	
          | |  | Kommentar Fra : Jakob Munck
 | 
 Dato :  26-06-06 18:40
 | 
 |  | 
 
            Mange tak for dine kommentarer. Jeg har et par spørgsmål:
 >>---------------------
 >><?php
 >>session_start();
 >>if (!isset($_SESSION[webmaster])) {
 >> header("Location: ikke_logget_ind.php");
 >>}
 >>------------------------
 >>
 >>Denne session sættes, når en webmaster (autoriseret person) logger sig ind
 >>og jeg troede at det ville forhindre, at andre kunne se siten, da denne
 >>session ikke sættes, når de logger sig ind.
 >
 > Der er et par detaljer:
 >
 > 1. Dit output fortsætter stadigvæk, selv om du har sat denne header.
 > Husk at sætte exit() umiddelbart bagefter, ellers bliver den reelle
 > webside stadigvæk sendt med (og brugeren kan blot sætte sin browser op
 > til ikke at følge din redirect til ikke_logget_ind.php). Derfor: Husk
 > at sørge for at afslutte script-afviklingen efter din viderestilling.
 >
 Kan du forklare det lidt mere tydeligt. Jeg forstår det ikke rigtigt. Hvad 
 kan en bruger gøre, som jeg ikke ønsker, hvis jeg har glemt at sætte exit() 
 efter headeren? Hvad er faren, hvad kan der ske?
 > 2. Primæsset er rigtigt nok, at en bruger ikke selv kan sætte
 > session-værdierne, men der kan være et par undtagelser:
 >
 > 2.1: Siden giver mulighed for at brugeren selv sætter session-værdier.
 > Det kan være, man har en form, der spreder sig over mange sider, og
 > blot har noget simpelt kode, der smider alle POST-nøgler/værdier over
 > i $_SESSION. Her kan brugeren så selv sende sine egne værdisæt med.
 >
 > 2.2: Har brugeren et webhotel på samme server, og php-opsætningen ikke
 > er sat op til at alle webhoteller deler session-mapper. Du kan læse
 > lidt om dette og se et eksempel på http://stock.ter.dk/session.php  .
 > Her afhænger det så af dit webhotel.
 >
 Det kan jeg vist ikke gøre noget ved.
 >
 > 3.2. Hvis brugeren har mulighed for at tilføje HTML på siden (fx hvis
 > der er et webforum, der tillader HTML), kan han havde lagt et
 Det er ikke muligt.
 > javascript ind, der sender brugerens cookie (og dermed session-id) til
 > ham. Hvis en webmaster, der er logget ind, kigger på siden, vil
 > webmasterens session-id så blive sendt til brugeren, der blot kan gå
 > ind på siden med dette session-id - og nu være logget ind.
 >
 >
 > Under alle omstændigheder kan det være relevant at kigge i logfilerne
 > for at se, hvilke sider, brugeren har været forbi - fx om han har
 > været forbi en login-side eller ej.
 >
 Ja, det er nok rigtigt.
 Tak for hjælpen.
 v.h.
 Jakob
 > -- 
 > - Peter Brodersen
 >  Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk >  Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
   Peter Brodersen (26-06-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  26-06-06 20:02
 | 
 |  | 
 
            On Mon, 26 Jun 2006 19:40:10 +0200, "Jakob Munck" <jm2@webspeed.dk>
 wrote:
 >> 1. Dit output fortsætter stadigvæk, selv om du har sat denne header.
 >> Husk at sætte exit() umiddelbart bagefter, ellers bliver den reelle
 >> webside stadigvæk sendt med (og brugeren kan blot sætte sin browser op
 >> til ikke at følge din redirect til ikke_logget_ind.php). Derfor: Husk
 >> at sørge for at afslutte script-afviklingen efter din viderestilling.
 >Kan du forklare det lidt mere tydeligt. Jeg forstår det ikke rigtigt. Hvad 
 >kan en bruger gøre, som jeg ikke ønsker, hvis jeg har glemt at sætte exit() 
 >efter headeren? Hvad er faren, hvad kan der ske?
 Forestil dig at du har kode i stil med:
 ....
 if (!isset($_SESSION['webmaster'])) {
  header("Location: ikke_logget_ind.php");
 }
 if ($_REQUEST['opret']) {
  // kode til at oprette en artikel
 }
 Selv hvis $_SESSION['webmaster'] ikke indeholder noget, så bliver
 resten af koden stadigvæk afviklet. Så hvis jeg går ind på den side
 med (for dette tilfælde)  ...?opret=1, så vil den del af koden
 stadigvæk blive afviklet, selv om der længere oppe er blevet sendt en
 header.
 -- 
 - Peter Brodersen
   Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk   Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
    Lasse Jensen (28-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  28-06-06 23:04
 | 
 |  | Peter Brodersen skrev:
 >
 > Forestil dig at du har kode i stil med:
 >
 > ...
 > if (!isset($_SESSION['webmaster'])) {
 >  header("Location: ikke_logget_ind.php");
 > }
 >
 > if ($_REQUEST['opret']) {
 >  // kode til at oprette en artikel
 > }
 >
 >
 > Selv hvis $_SESSION['webmaster'] ikke indeholder noget, så bliver
 > resten af koden stadigvæk afviklet. Så hvis jeg går ind på den side
 > med (for dette tilfælde)  ...?opret=1, så vil den del af koden
 > stadigvæk blive afviklet, selv om der længere oppe er blevet sendt en
 > header.
 >
 
 Men det kræver jo så dog at personen ved at der er en variabel som
 hedder "opret" på siden, hvilken han ikke kan vide, da den ikke er
 synlig. Og derefter skal han så indtaste den manuelt i "adresse-baren"
 og give den en værdi som du viser. Men det er et sikkersheds-hul, så ja
 husk altid exit;
 
 Men er der egentlig nogen måde at finde ud af hvilke variabler der
 ligger på siden? Eller er det bare om at gætte hvis man er fremmed,
 indtil man støder på "opret" i dette her tilfælde?
 
 Det er nok sjældent det er muligt at gætte sig frem til så.
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
     Rune Christensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Rune Christensen
 | 
 Dato :  29-06-06 09:28
 | 
 |  | "Lasse Jensen" <kontakt@webweaver.dk> skrev i en meddelelse
 news:44a2fcc1$0$15794$14726298@news.sunsite.dk...
 > Men er der egentlig nogen måde at finde ud af hvilke variabler der ligger
 > på siden? Eller er det bare om at gætte hvis man er fremmed, indtil man
 > støder på "opret" i dette her tilfælde?
 
 Personligt navngiver jeg variablerne med navne som giver mening og nogen
 gange tager jeg også navne fra de eksempler man ser på nettet. Så det burde
 ikke være svært at gætte sig frem, hvis man kender lidt til personen gennem
 f.eks. spørgsmål i nyhedsgrupper, hvor man nogle gange linker til de
 pågældende scripts som spørgsmålet omhandler.
 
 F.eks. login.php kunne der indgå
 user
 username
 name
 pass
 password
 etc.
 
 Det vil ikke være noget større job for en computer at tage den danske ordbog
 eller den engelske og checke alle ordene.
 
 Sikkerhed fås ikke ved at skjule programkode, men kan f.eks. opnås ved at så
 mange mennesker som muligt har kigget koden igennem for sikkerhedshuller.
 
 >
 > Det er nok sjældent det er muligt at gætte sig frem til så.
 >
 > Mvh. Lasse Jensen
 
 Mvh.
 Rune
 
 
 
 
 |  |  | 
      Lasse Jensen (30-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  30-06-06 01:27
 | 
 |  | Rune Christensen skrev:
 >
 > Sikkerhed fås ikke ved at skjule programkode, men kan f.eks. opnås ved at så
 > mange mennesker som muligt har kigget koden igennem for sikkerhedshuller.
 >
 
 Naturligvis. Det skal der ikke herske nogen tvivl om!
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
  Michael Zedeler (26-06-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  26-06-06 09:43
 | 
 |  | 
 
            Jakob Munck wrote:
 > Jeg har for nylig haft indbrud på en site, hvor en person fik adgang til en 
 > administrations-side, hvor han lavede diverse hærværk. Det var meget 
 > ubehagelgt og det vil jeg gerne undgå sker igen. Siten var beskyttet med 
 > denne kode øverst:
 > 
 > ---------------------
 > <?php
 > session_start();
 > if (!isset($_SESSION[webmaster])) {
 >  header("Location: ikke_logget_ind.php");
 > }
 > ------------------------
 > 
 > Denne session sættes, når en webmaster (autoriseret person) logger sig ind 
 > og jeg troede at det ville forhindre, at andre kunne se siten, da denne 
 > session ikke sættes, når de logger sig ind.
 > 
 > Jeg forsøger at finde ud af, hvordan dette indbrud er lavet, og derfor vil 
 > jeg godt vide, om der er metoder, hvormed hackere og andre kan "forfalske" 
 > en session og dermed få adgang til et område, som kræver at denne session 
 > eksisterer? Forudsætningen er naturligvis, at man kender URL til filen, men 
 > hvis man gør det, kan man så forfalske en session og dermed få adgang til et 
 > område, som er beskyttet på ovenstående måde?
 Det første jeg ville kigge efter, er om der er mulighed for 
 SQL-injection-angreb i dit system. Først når det er udelukket, ville jeg 
 kigge andre steder.
 Det er teoretisk muligt at stjæle en session, men det er meget 
 kompliceret, så med mindre der er en meget god grudn til at hacke lige 
 præcis din hjemmeside, tror jeg ikke at det er derigennem vedkommende 
 har fået adgang.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
  Jakob Munck (26-06-2006) 
 
	
          | |  | Kommentar Fra : Jakob Munck
 | 
 Dato :  26-06-06 18:46
 | 
 |  | >
 > Det første jeg ville kigge efter, er om der er mulighed for
 > SQL-injection-angreb i dit system. Først når det er udelukket, ville jeg
 > kigge andre steder.
 >
 
 Alle mine forme indsættes i db med kode af denne type:
 
 ----------------------------------------
 
 $indhold = $_POST["indhold"];
 $indhold = strip_tags($indhold);
 
 if(!get_magic_quotes_gpc()){
 $indhold = addslashes($indhold);
 }
 
 $dato_tid = date("Y-m-d G:i:s", time());
 $unixtid = date("U", time());
 mysql_query("INSERT INTO semeddelelser (afsender_id, indhold, dato_tid,
 unixtid) VALUES ('$indhold', '$dato_tid', '$unixtid')");
 
 header("Location: medd_list.php");
 ---------------------------------------
 
 Jeg har ikke meget begreb om FQL-injection, men har fået at vide, at
 ovenstående kode skulle være ok og ikke gøre denne form for hacking mulig. I
 øvrigt var hackeren så fræk, at udsende interne medlemsmails til sitens
 medlemmer med vores post-system, og det tyder vel ikke på, at der er tale om
 sql-incektion. Snarere på, at han er trængt "fysisk" ind i vores
 Webmaster-område.
 
 Er koden ok, eller hvad?
 
 v.h.
 Jakob
 
 
 
 
 |  |  | 
   Michael Zedeler (26-06-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  26-06-06 22:49
 | 
 |  | 
 
            Jakob Munck wrote:
 >>Det første jeg ville kigge efter, er om der er mulighed for 
 >>SQL-injection-angreb i dit system. Først når det er udelukket, ville jeg 
 >>kigge andre steder.
 > 
 > Alle mine forme indsættes i db med kode af denne type:
 > 
 > ----------------------------------------
 > 
 > $indhold = $_POST["indhold"];
 >  $indhold = strip_tags($indhold);
 > 
 >    if(!get_magic_quotes_gpc()){
 >     $indhold = addslashes($indhold);
 >    }
 > 
 >  $dato_tid = date("Y-m-d G:i:s", time());
 >  $unixtid = date("U", time());
 >  mysql_query("INSERT INTO semeddelelser (afsender_id, indhold, dato_tid, 
 > unixtid) VALUES ('$indhold', '$dato_tid', '$unixtid')");
 > 
 >  header("Location: medd_list.php");
 > ---------------------------------------
 > 
 > Jeg har ikke meget begreb om FQL-injection, men har fået at vide, at 
 > ovenstående kode skulle være ok og ikke gøre denne form for hacking mulig.
 Det er ikke længere nok til at man automatisk kan vide sig sikker. Se 
 dokumentationen på http://dk2.php.net/manual/en/function.addslashes.php > I øvrigt var hackeren så fræk, at udsende interne medlemsmails til sitens 
 > medlemmer med vores post-system, og det tyder vel ikke på, at der er tale om 
 > sql-incektion. Snarere på, at han er trængt "fysisk" ind i vores 
 > Webmaster-område.
 "Fysisk"? Hvis der er nogen som har pillet ved din server, er det nok en 
 låsesmed og en politimand, du skal have fat i    Med SQL-injection kan du sagtens logge ind som en anden bruger, givet at 
 systemet er sårbart. Er det hvad du hentyder til med "fysisk"?
 > Er koden ok, eller hvad?
 Jeg kan hverken sige ja eller nej. Jeg mener ikke at det er en god idé 
 overhovedet at bruge addslashes og alle disse dersens besværgelser over 
 inputstrenge, som er blevet så moderne i LAMP-miljøer. I virkeligheden 
 kan man undgå stort set alle disse problemer ved at bruge prepared 
 statements. Se http://dk2.php.net/manual/en/function.mysqli-prepare.php Det rare ved prepared statements er, at man helt slipper for at skulle 
 escape de værdier, som man bruger.
 Desværre er prepared statements ikke specielt udbredte, så jeg ved ikke 
 om der - trods de gode muligheder for det modsatte - er nogle lignende 
 sikkerhedsproblemer med dem. Endelig skal det siges at prepared 
 statements oprindeligt blev indført for at give bedre performance, 
 hvilket ikke ligefrem er formålet med at bruge dem i det, jeg beskriver 
 ovenfor.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
  ThomasB (26-06-2006) 
 
	
          | |  | Kommentar Fra : ThomasB
 | 
 Dato :  26-06-06 20:29
 | 
 |  | "Jakob Munck" <jm2@webspeed.dk> skrev i en meddelelse
 news:449f92aa$0$140$edfadb0f@dread11.news.tele.dk...
 
 > <?php
 > session_start();
 > if (!isset($_SESSION[webmaster])) {
 > header("Location: ikke_logget_ind.php");
 > }
 
 Jeg ville lave det på en anden måde.
 
 Først ville jeg søge i DB om brugern har ret til at logge ind..
 
 Hvis han har det - altså hvis DB retunerer mere end 0 records (1 record) på
 brugernavn og password i db-søgning, så kan du sætte session på brugernavn
 og password (evt. kan du lave en md5 på password).
 
 Samtidig skal du lave en if ($num_rows_fra_db > 0){$login =
 "ok";}else{$login="ikkeok";}
 
 Rundt om alt den kode du vil have beskyttet laver du:
 
 if ($login == "ok"){
 
 beskyttet kode
 
 }else{
 
 print "du skal logge ind";
 
 }
 
 Håber du forstår.
 
 Mvh Thomas
 
 
 
 
 |  |  | 
  Ove Lie (26-06-2006) 
 
	
          | |  | Kommentar Fra : Ove Lie
 | 
 Dato :  26-06-06 20:36
 | 
 |  | "ThomasB" <usenet*fjern*@*SKAL FJERNES*2ma2.dk> skrev i melding
 news:44a03571$0$15788$14726298@news.sunsite.dk...
 > "Jakob Munck" <jm2@webspeed.dk> skrev i en meddelelse
 > news:449f92aa$0$140$edfadb0f@dread11.news.tele.dk...
 
 
 > Samtidig skal du lave en if ($num_rows_fra_db > 0){$login =
 > "ok";}else{$login="ikkeok";}
 
 Bare det at søk i database ikke er "casesesitive" så jeg ville kjørt en test
 i php på om brukernavn==intastet_brukernavn og pw==intastet_pw
 
 ellers vil ove/hus bli godkjent selv om ove/Hus er den korekte
 kombinasjonen.
 
 -Ove
 
 
 
 
 |  |  | 
   Peter Brodersen (26-06-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  26-06-06 20:40
 | 
 |  | 
 
            On Mon, 26 Jun 2006 21:36:14 +0200, "Ove Lie" <Ove.Ed.Lie@c2i.net>
 wrote:
 >Bare det at søk i database ikke er "casesesitive" så jeg ville kjørt en test
 >i php på om brukernavn==intastet_brukernavn og pw==intastet_pw
 >
 >ellers vil ove/hus bli godkjent selv om ove/Hus er den korekte
 >kombinasjonen.
 Det afhænger så sandelig af ens felt-type og collation. Normalt
 angiver man password-feltet som en binary-collation i tabelstrukturen
 (eller alternativt i selve forespørgslen, hvis man ikke kan slippe af
 sted med andet).
 -- 
 - Peter Brodersen
   Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk   Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
    Ove Lie (26-06-2006) 
 
	
          | |  | Kommentar Fra : Ove Lie
 | 
 Dato :  26-06-06 21:03
 | 
 |  | "Peter Brodersen" <usenet2006@ter.dk> skrev i melding
 news:e7pd74$cgh$1@news.klen.dk...
 > On Mon, 26 Jun 2006 21:36:14 +0200, "Ove Lie" <Ove.Ed.Lie@c2i.net>
 > wrote:
 >
 > >Bare det at søk i database ikke er "casesesitive" så jeg ville kjørt en
 test
 > >i php på om brukernavn==intastet_brukernavn og pw==intastet_pw
 > >
 > >ellers vil ove/hus bli godkjent selv om ove/Hus er den korekte
 > >kombinasjonen.
 >
 > Det afhænger så sandelig af ens felt-type og collation. Normalt
 > angiver man password-feltet som en binary-collation i tabelstrukturen
 > (eller alternativt i selve forespørgslen, hvis man ikke kan slippe af
 > sted med andet).
 
 Jo du har rett, men det er ofte at "noen" plages med dette, og det var det
 jeg ønsket å poengtere/rette oppmerksomheten mot.
 
 -Ove
 
 
 
 
 |  |  | 
   Martin (26-06-2006) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  26-06-06 21:07
 | 
 |  | Ove Lie wrote:
 > "ThomasB" <usenet*fjern*@*SKAL FJERNES*2ma2.dk> skrev i melding
 > news:44a03571$0$15788$14726298@news.sunsite.dk...
 >> "Jakob Munck" <jm2@webspeed.dk> skrev i en meddelelse
 >> news:449f92aa$0$140$edfadb0f@dread11.news.tele.dk...
 >
 >
 >> Samtidig skal du lave en if ($num_rows_fra_db > 0){$login =
 >> "ok";}else{$login="ikkeok";}
 >
 > Bare det at søk i database ikke er "casesesitive" så jeg ville kjørt en test
 > i php på om brukernavn==intastet_brukernavn og pw==intastet_pw
 
 Jeg laver altid en lille strtolower() på alle brugernavne og kodeord når
 det sættes ind i databasen, og det samme med passwords, inden det ryger
 ind igennem en md5() - så er man ude over det problem.
 
 >
 > ellers vil ove/hus bli godkjent selv om ove/Hus er den korekte
 > kombinasjonen.
 >
 > -Ove
 >
 >
 
 
 |  |  | 
   ThomasB (27-06-2006) 
 
	
          | |  | Kommentar Fra : ThomasB
 | 
 Dato :  27-06-06 09:28
 | 
 |  | "Ove Lie" <Ove.Ed.Lie@c2i.net> skrev i en meddelelse
 news:WsCdnQEsiYmyqj3Z4p2dnA@telenor.com...
 >> Samtidig skal du lave en if ($num_rows_fra_db > 0){$login =
 >> "ok";}else{$login="ikkeok";}
 >
 > Bare det at søk i database ikke er "casesesitive" så jeg ville kjørt en
 > test
 > i php på om brukernavn==intastet_brukernavn og pw==intastet_pw
 >
 > ellers vil ove/hus bli godkjent selv om ove/Hus er den korekte
 > kombinasjonen.
 
 Hvis du ikke vil have det casesensitive, kan du bare vælge f.eks "longtext"
 til dit brugernavn og password i databasen.
 
 
 
 
 |  |  | 
    Peter Brodersen (27-06-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  27-06-06 09:56
 | 
 |  | 
 
            On Tue, 27 Jun 2006 10:27:41 +0200, "ThomasB" <usenet*fjern*@*SKAL
 FJERNES*2ma2.dk> wrote:
 >Hvis du ikke vil have det casesensitive, kan du bare vælge f.eks "longtext" 
 >til dit brugernavn og password i databasen.
 Det ændrer ikke noget. Longtext vil stadigvæk som udgangspunkt have en
 almindelig charset-collation:
 mysql> create table foo (bar longtext);
 mysql> insert into foo values ('BaZ');
 mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 *************************** 1. row ***************************
 COUNT(*): 1
 Men:
 mysql> create table foo (bar longtext binary);
 mysql> insert into foo values ('BaZ');
 mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 *************************** 1. row ***************************
 COUNT(*): 0
 -- 
 - Peter Brodersen
   Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk   Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
     ThomasB (27-06-2006) 
 
	
          | |  | Kommentar Fra : ThomasB
 | 
 Dato :  27-06-06 12:11
 | 
 |  | "Peter Brodersen" <usenet2006@ter.dk> skrev i en meddelelse
 news:e7qrr7$jae$1@news.klen.dk...
 >>Hvis du ikke vil have det casesensitive, kan du bare vælge f.eks
 >>"longtext"
 >>til dit brugernavn og password i databasen.
 
 > mysql> create table foo (bar longtext);
 > mysql> insert into foo values ('BaZ');
 > mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 > *************************** 1. row ***************************
 > COUNT(*): 1
 
 Den finder en - så den er caseINsensitive med longtext. (som jeg skrev)
 
 > mysql> create table foo (bar longtext binary);
 > mysql> insert into foo values ('BaZ');
 > mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 > *************************** 1. row ***************************
 > COUNT(*): 0
 
 Aha, så den bliver casesensitive når longtext gøres binær?
 
 
 
 
 
 |  |  | 
      Peter Brodersen (27-06-2006) 
 
	
          | |  | Kommentar Fra : Peter Brodersen
 | 
 Dato :  27-06-06 12:23
 | 
 |  | 
 
            On Tue, 27 Jun 2006 13:10:53 +0200, "ThomasB" <usenet*fjern*@*SKAL
 FJERNES*2ma2.dk> wrote:
 >>>Hvis du ikke vil have det casesensitive, kan du bare vælge f.eks 
 >>>"longtext"
 >>>til dit brugernavn og password i databasen.
 >
 >Den finder en - så den er caseINsensitive med longtext. (som jeg skrev)
 Jeg missede dit "ikke"    >> mysql> create table foo (bar longtext binary);
 >> mysql> insert into foo values ('BaZ');
 >> mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 >> *************************** 1. row ***************************
 >> COUNT(*): 0
 >
 >Aha, så den bliver casesensitive når longtext gøres binær?
 Ja - eller rettere, binary er blot en shortcut for "collate
 latin1_bin" (hvis man bruger latin1 som character set)
 -- 
 - Peter Brodersen
   Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk   Nu med link direkte til en adresse, fx: www.findvej.dk/Nybrogade2,1203 |  |  | 
       ThomasB (27-06-2006) 
 
	
          | |  | Kommentar Fra : ThomasB
 | 
 Dato :  27-06-06 14:43
 | 
 |  | 
 
            "Peter Brodersen" <usenet2006@ter.dk> skrev i en meddelelse 
 news:e7r4fl$put$1@news.klen.dk...
 >>Den finder en - så den er caseINsensitive med longtext. (som jeg skrev)
 >
 > Jeg missede dit "ikke"    Tænkte det nok.
 >>> mysql> create table foo (bar longtext binary);
 >>> mysql> insert into foo values ('BaZ');
 >>> mysql> select COUNT(*) from foo where bar = 'bAZ'\G
 >>> *************************** 1. row ***************************
 >>> COUNT(*): 0
 >>
 >>Aha, så den bliver casesensitive når longtext gøres binær?
 >
 > Ja - eller rettere, binary er blot en shortcut for "collate
 > latin1_bin" (hvis man bruger latin1 som character set)
 Det var jeg ikke klar over. I det hele taget tror jeg godt at jeg kunne 
 bruge en time eller to, på at sætte mig lidt mere ind i de forskellige 
 datatyper i mysql.. 
            
             |  |  | 
  Martin (26-06-2006) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  26-06-06 21:00
 | 
 |  | Jakob Munck wrote:
 > ---------------------
 > <?php
 > session_start();
 > if (!isset($_SESSION[webmaster])) {
 >  header("Location: ikke_logget_ind.php");
 > }
 > ------------------------
 
 Som Peter siger, så er det ALTID en god idé at afslutte en
 header("location..."); af med en exit; ligeefter.
 Fx
 
 <?php
 session_start();
 if (!isset($_SESSION[webmaster])) {
 header("Location: ikke_logget_ind.php");
 exit;
 }
 
 så STOPPER php parseren der og vil ikke afvikle noget andet kode, det
 vil den faktisk gøre hvis du fx bare skriver echo "Hej"; nedenunder.
 Du kan selv prøve at slå "automatisk redirects" fra i din browser (under
 sikkerheds indstillinger svjh)
 
 En anden god ting, det er ALTID at tjekke op imod databasen hver eneste
 gang.
 
 Lav fx. en funktion til det - den kunne se således ud.
 
 function adminLogin($user,$pass) {
 $sql = mysql_query("
 SELECT COUNT(*)
 FROM tabel
 WHERE user = '".$user."'
 AND pass = '".$pass."'
 ");
 if(mysql_result($sql,0)==1) return true;
 else return false;
 }
 
 Så sætter du bare $_SESSION["login"] $_SESSION["pass"] efter din html form.
 
 Så på hver eneste administrator side, kaldes i starten
 <?php
 session_start();
 if(adminLogin($_SESSION["login"],$_SESSION["pass"])===FALSE) {
 header("location: ikkeloggetind.php");
 exit;
 }
 // beskyttet kode
 ?>
 
 En anden ting, er at ALLE passwords i din database bliver krypteret med
 MD5, det har den fordel, at det er umuligt (kun nogle forskere har endnu
 brudt koden) at få den rigtige kode, da det er 1-vejs kryptering.
 Bagdelen er at du ikke kan lige skrive til Hr.Olsen hans password, så
 skal du ind og rette manuelt i databasen (eller bruge et
 administrationsmodul til at ændre hans kodeord).
 
 Du har måske undret dig over at når du trykkede "glemt kodeord" på nogen
 sider at du så får en meget underlig kode tilsendt i din mailbox, det er
 netop pga at man ikke kan dekryptere kodeordet i databasen.
 
 En anden ting er at tekst i $_SESSION bliver gemt som rå tekst - dvs
 100% letlæselig, og kan sagtens læses af en anden der sidder på det
 samme trådløse netværk (fx TDC Hotspot eller lign.) - så kodeordet i
 $_SESSION["pass"] skal allerede DER krypteres.
 
 En anden ting der kan være sket med din webmaster, er at han har siddet
 på en offentlig computer (bibliotek eller lign.) og har ændret på det
 han nu skulle, lukket browseren, men har ikke lukket det andet browser
 vindue, så lever $_SESSION nemlig endnu, også er det bare for den
 "nysgerrige" at trykke på history og snuppe linket til dit
 administrationsmodul, og bummelum free access :)
 
 Der er ikke rigtig nogen metode at komme udenom ovenstående (svjv),
 andet end man skal opfordre brugeren til at bruge logud knappen
 HVERGANG, eller lave noget javascript der selv sørger for at slette
 sessionen, med noget ala <body onUnload="sletsession.php">, men så er
 det jo at mange offentlige computere, ikke har slået javascript til -
 også er man lige vidt.
 
 Nå, det blev sku en lille roman, kan jeg se, håber du har fået lidt
 indblik i en der har for et årstid siden haft samme problem, og måtte
 gennemgå hele $_SESSION miljøet :)
 
 
 |  |  | 
  Jakob Munck (27-06-2006) 
 
	
          | |  | Kommentar Fra : Jakob Munck
 | 
 Dato :  27-06-06 06:04
 | 
 |  | jeg takker hermed jer alle for ovenstående kommentarer, som jeg læser
 grundigt og ser i hvilken udstrækning jeg kan forstå og bruge i min kode.
 
 v.h.
 Jakob
 
 
 
 
 |  |  | 
 |  |