/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med login-kode
Fra : Kim Ludvigsen


Dato : 29-09-08 22:27

Jeg har lavet et login-script, som opfører sig underligt. På
min egen webserver og på mit eget webhotel, er der ingen
problemer. Men på et andet webhotel, får man lov at komme
forbi scriptet uden at indtaste brugernavn og adgangskode.
Nogen der kan forklare, hvad der går galt?

Scriptet består af to dele. Første del er indsat over doctypen:
<?php
session_start();
$bruger = "brugernavn";
$kode = "kode";
$logintekst = "<h2>Denne side kræver login</h2>";
$hjemmeside = "http://bjarnekroghhansen.dk";

/* Hvis der er logget af */
if (isset($_REQUEST['logaf'])) {
session_destroy();
header("Location: $hjemmeside");
}

if (isset($_REQUEST['bruger'])) {
$_SESSION['bruger'] = $_REQUEST['bruger'];
}
if (isset($_REQUEST['kode'])) {
$_SESSION['kode'] = $_REQUEST['kode'];
}
?>


Længere nede på siden:
<?php
/* Hvis ikke logget ind vises login-formular */
if ($_SESSION['bruger'] != $bruger || $_SESSION['kode'] !=
$kode) {
?>
<div style="width:400px; text-align:center;
margin-left:auto; margin-right:auto;">
<?php echo $logintekst; ?>
<form action='<?php echo $_SERVER['php_self']; ?>'
method='post'>
// Her følger resten af formularen
}
?>

Her er siden, hvor det ikke virker. Klikker man to gange på
Send-knappen, får man lov at komme ind, selvom man ikke har
udfyldt felterne:
http://bjarnekroghhansen.dk/login/login.php

Kan fejlen ligge i nedenstående linje?
<form action='<?php echo $_SERVER['php_self']; ?>'
method='post'>
når jeg beder om kildekoden på siden, ser linjen sådan ud:
<form action='' method='post'>

--
Mvh. Kim Ludvigsen
Gratis backup med Ceren Backup.
http://kimludvigsen.dk

 
 
Christian Hansen (29-09-2008)
Kommentar
Fra : Christian Hansen


Dato : 29-09-08 23:29

Kim Ludvigsen wrote:
> Jeg har lavet et login-script, som opfører sig underligt. På min egen
> webserver og på mit eget webhotel, er der ingen problemer. Men på et
> andet webhotel, får man lov at komme forbi scriptet uden at indtaste
> brugernavn og adgangskode. Nogen der kan forklare, hvad der går galt?

Jeg kunne godt tænke mig at se hele login.php - jeg kan se at der bliver
sat en session efter 1. forsøg - måske du bare tjekker for om der er en
session et eller andet sted og så giver grønt lys på den baggrund?

kan du eventuelt gemme den som login.phps, hvis din installation
understøtter kildekodevisning sådan.
>
> Kan fejlen ligge i nedenstående linje?
> <form action='<?php echo $_SERVER['php_self']; ?>' method='post'>
> når jeg beder om kildekoden på siden, ser linjen sådan ud:
> <form action='' method='post'>

Det skal vist være $_SERVER["PHP_SELF"], men det er næppe det, der er
fejlen. Hvis der ikke står noget i action, forsøger min browser i hvert
fald at sende postet til den aktuelle side - altså login.php - sådan
står det i hvert fald i mine headers.

Mvh Christian


--
Christian Hansen
http://www.resource-it.dk/

Christian Hansen (29-09-2008)
Kommentar
Fra : Christian Hansen


Dato : 29-09-08 23:38

Kim Ludvigsen wrote:

> Længere nede på siden:
> <?php
> /* Hvis ikke logget ind vises login-formular */
> if ($_SESSION['bruger'] != $bruger || $_SESSION['kode'] != $kode) {
> ?>

Hvis $bruger og $kode ikke er i global scope her, kan de være tomme - og
da $_SESSION['bruger'] og $_SESSION['kode'] ligeledes vil være tomme,
såfremt man blot har trykket login 2 gange, så vil ovenstående ikke
træde i kraft. Men igen, så afhænger det af, hvordan hele koden ser ud.
Om det er fejlen er ikke til at sige baseret på det, du har sendt med.

Prøv at printe de implicerede variable umiddelbart før ovenstående tjek.

Mvh Christian

--
Christian Hansen
http://www.resource-it.dk/

Birger Sørensen (29-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 29-09-08 23:54

Christian Hansen skrev:
> Kim Ludvigsen wrote:
>
>> Længere nede på siden:
>> <?php
>> /* Hvis ikke logget ind vises login-formular */
>> if ($_SESSION['bruger'] != $bruger || $_SESSION['kode'] != $kode) {
>> ?>
>
> Hvis $bruger og $kode ikke er i global scope her, kan de være tomme - og da
> $_SESSION['bruger'] og $_SESSION['kode'] ligeledes vil være tomme, såfremt
> man blot har trykket login 2 gange, så vil ovenstående ikke træde i kraft.
> Men igen, så afhænger det af, hvordan hele koden ser ud. Om det er fejlen er
> ikke til at sige baseret på det, du har sendt med.
>
> Prøv at printe de implicerede variable umiddelbart før ovenstående tjek.
>
> Mvh Christian

Prøv at bruge $_POST i stedet for $_REQUEST.

Ellers prøv at udskrive indholdet af variablene, og se om de er som du
forventer...

Birger



Kim Ludvigsen (30-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 30-09-08 01:44

Christian Hansen skrev:
> Kim Ludvigsen wrote:
>
>> Længere nede på siden:
>> <?php
>> /* Hvis ikke logget ind vises login-formular */
>> if ($_SESSION['bruger'] != $bruger || $_SESSION['kode'] != $kode) {
>> ?>
>
> Hvis $bruger og $kode ikke er i global scope her, kan de være tomme - og
> da $_SESSION['bruger'] og $_SESSION['kode'] ligeledes vil være tomme,
> såfremt man blot har trykket login 2 gange, så vil ovenstående ikke
> træde i kraft.

Det lyder meget logisk, men værdien på henholdsvis bruger og
kode er angivet først på siden, så de burde ikke kunne være
tomme. Jeg har ikke selv adgang til den pågældende server,
men jeg har modtaget filerne, zippet dem og uploadet dem her:
http://kimludvigsen.dk/projekter/login.zip

Scriptet virker som sagt fint på min hjemmeserver og på
Gigahost. Problemsiden ligger på Surftown.

--
Mvh. Kim Ludvigsen
Beskyt de små mod porno på internettet.
http://kimludvigsen.dk

mobjerg@gmail.com (30-09-2008)
Kommentar
Fra : mobjerg@gmail.com


Dato : 30-09-08 07:00

On Sep 29, 11:27 pm, Kim Ludvigsen <use...@kimludvigsen.dk> wrote:
>    $_SESSION['bruger'] = $_REQUEST['bruger'];}

Surftown har højst sandsynligt register_globals slået til, dvs. i
ovenstående sætning sætter du reelt både $bruger og
$_SESSION['bruger'] til samme værdi. Med andre ord, hvis der ligger én
eller anden værdi (uanset hvad) i $_REQUEST['bruger'] og i
$_REQUEST['kode'], så vil du blive logget ind.

PS: Beklager hvis indlægget bliver lidt mystisk formatteret. Jeg faldt
bare lige over dette, og må bruge Google Groups til at svare. :)

Mvh Jakob

Bertel Lund Hansen (30-09-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 30-09-08 14:13

mobjerg@gmail.com skrev:

> Surftown har højst sandsynligt register_globals slået til,

Naturligvis. Løsningen lå lige for, men jeg er holdt op med at
tænke i de baner. Jeg troede ikke man kunne finde en udbyder der
kørte med den opsætning.

Til Kim:

Det problem løses ved at du kalder de variable noget forskelligt.
Altså:

   $accepteret_bruger='brugernavn';
   $accepteret_kode='kode';

og så tester:

   if ($_POST['bruger']==$accepteret_bruger) ...

Princippet ved [register_globals on] er at $_XXXX['variabel'] og
$variabel automatisk altid har samme værdi hvor XXXX er POST
eller GET. Det er en uheldig opsætning af PHP.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (30-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 30-09-08 18:03

Bertel Lund Hansen skrev:
> mobjerg@gmail.com skrev:
>
>> Surftown har højst sandsynligt register_globals slået til,

Tak!

> Princippet ved [register_globals on] er at $_XXXX['variabel'] og
> $variabel automatisk altid har samme værdi hvor XXXX er POST
> eller GET. Det er en uheldig opsætning af PHP.

Og tak til Bertel for ovenstående forklaring, nu har selv
jeg forstået det.

Scriptet er blevet ændret og jeg har fået en tilbagemelding
om, at det nu fungerer.

--
Mvh. Kim Ludvigsen
Desktop Sidebar: Information at your fingertips.
http://kimludvigsen.dk

mobjerg@gmail.com (30-09-2008)
Kommentar
Fra : mobjerg@gmail.com


Dato : 30-09-08 09:38

On Sep 30, 3:12 pm, Bertel Lund Hansen <unosp...@lundhansen.dk> wrote:
> Princippet ved [register_globals on] er at $_XXXX['variabel'] og
> $variabel automatisk altid har samme værdi hvor XXXX er POST
> eller GET. Det er en uheldig opsætning af PHP.

Næsten. $variabel = 'foo' vil ikke ændre nogen af værdierne i
$_XXXX['variabel']. Og ja, register_globals er noget fanden har fundet
på, og har givet anledning til adskillige sikkerhedshuller.

Mvh Jakob

Martin (06-10-2008)
Kommentar
Fra : Martin


Dato : 06-10-08 04:50

mobjerg@gmail.com wrote:
> On Sep 30, 3:12 pm, Bertel Lund Hansen <unosp...@lundhansen.dk> wrote:
>> Princippet ved [register_globals on] er at $_XXXX['variabel'] og
>> $variabel automatisk altid har samme værdi hvor XXXX er POST
>> eller GET. Det er en uheldig opsætning af PHP.
>
> Næsten. $variabel = 'foo' vil ikke ændre nogen af værdierne i
> $_XXXX['variabel']. Og ja, register_globals er noget fanden har fundet
> på, og har givet anledning til adskillige sikkerhedshuller.

Dejligt det også snart er helt væk :)

N/A (06-10-2008)
Kommentar
Fra : N/A


Dato : 06-10-08 04:50



N/A (06-10-2008)
Kommentar
Fra : N/A


Dato : 06-10-08 04:50



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste