Gå til innhold

Hjelp! Mitt flotte innloggingssystem er ødelagt.


Anbefalte innlegg

Videoannonse
Annonse

Hmm.. rart.

I går gikk det overhodet ikke an å logge seg inn med ie, prøvde på mange forskjellige maskiner, men i dag gikk det helt fint.

 

Men jeg klarer fortsatt ikke å logge inn når jeg er på skolen.

 

her er koden min:

<?
session_start();
include("header.inc");

?>
<br>
<img src="gui/logginn.gif"><br>
<br>
<?


if ($formpassord!=""||$formbrukernavn!="")
{
include("mysqlcon.inc");

$query="select * from bklassen.usertable where nick='".$formbrukernavn."';";

$result=mysql_query($query);

mysql_close();

@ $num_results=mysql_num_rows($result);

if ($num_results!=1)
 $ugyldigbrukernavn=1;

if ($num_results==1)
{
 $ektepassord=mysql_result($result, 0, "passord");
 $userid=mysql_result($result, 0, "userid");
}

if ($ektepassord==$formpassord && $ugyldigbrukernavn==0)
{
 $godkjentbrukernavn=$formbrukernavn;
 session_register("godkjentbrukernavn");
 session_register("userid");
}

if ($ektepassord!=$formpassord )
 $feilpassord=1;

}



if(!session_is_registered("godkjentbrukernavn"))
{
echo "Noen av sidene er passordbeskyttet for å verne om sensitiv informasjon.<br>
Skriv inn brukernavn og passord i feltene under for å logge inn.<br><br>";
include("login.inc");
if ($ugyldigbrukernavn==1)
 echo "<b>Ugyldig brukernavn!</b>";
if ($feilpassord && $ugyldigbrukernavn=="")
 echo "<b>Feil passord!</b>";
}


if(session_is_registered("godkjentbrukernavn"))
{
?>
Innlogging gjennomført.. Du sendes nå videre til forumet<br>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=forum.php">
<?
}


include("footer.inc");
?>

Lenke til kommentar

Her er det nok noe bakoverkompatibilitet som er problemet...

 

1.

Du må minst ha:

$formpassord = $_POST['formpassord'];

$formbrukernavn = $_POST['formbrukernavn'];

 

2.

I tillegg bør du kjøre dem igjennom "mysql_real_escape_string();" for slik scripet ditt er nå kan den potensielt bli hacket via "mysql injection".

 

3.

I tillegg brukes ikke session_register lengre, man bruker heller $_SESSION['variabel'] = "verdi";

 

Samme gjelder session_is_registered.

 

4.

Du bør heller ikke sjekke om variabelen "godkjentbrukernavn" er satt til true, du bør sjekke påloggingen for hver side du åpner. ;)

 

Edit:

Årsaken er nok at din host har slått av register_globals (standard i PHP etter 4.2.0)

Endret av ZoRaC
Lenke til kommentar
4.

Du bør heller ikke sjekke om variabelen "godkjentbrukernavn" er satt til true, du bør sjekke påloggingen for hver side du åpner. ;)

7191538[/snapback]

Hvorfor det?

Det er ingen måte klienten kan føkke med sessions uansett, de lagres jo på serveren. Isåfall må han endre sessid til en annen som er logget inn, det skal en del til, og da vil brukernavnet og passordet stemme uansett.

 

 

register globals høres ut som årsaken, men dersom det funker på forskjellige maskiner (som alle kobler til samme server), så høres det mer ut som et problem med at klienten ikke vil lagre cookies (og dermed ikke sessid)

Lenke til kommentar
4.

Du bør heller ikke sjekke om variabelen "godkjentbrukernavn" er satt til true, du bør sjekke påloggingen for hver side du åpner. ;)

7191538[/snapback]

Hvorfor det?

Det er ingen måte klienten kan føkke med sessions uansett, de lagres jo på serveren. Isåfall må han endre sessid til en annen som er logget inn, det skal en del til, og da vil brukernavnet og passordet stemme uansett.

7192558[/snapback]

Hva hvis man har en konto på samme server? Da er det ikke verre enn å lage eller rettere sagt hente inn session med en bestemt id og redigere i veg :)
Lenke til kommentar
Hva hvis man har en konto på samme server? Da er det ikke verre enn å lage eller rettere sagt hente inn session med en bestemt id og redigere i veg :)

7192603[/snapback]

Hvis dette går an er det jo en kjemperisiko i PHP.

Høres merkelig ut, men det har jeg aldri hørt eller lest noe om, så jeg vet ikke.

 

If your site is run on a shared Web server, be aware that any session variables can easily be viewed by any other users on the same server. Mitigate this vulnerability by storing all sensitive data in a database record that's keyed to the session ID rather than as a session variable. If you must store a password in a session variable (and I stress again that it's best just to avoid this), do not store the password in clear text; use the sha1() (PHP 4.3+) or md5() function to store the hash of the password instead.

SKUMMELT!

 

Her står det litt mer om temaet, og hvordan unngå det:

http://phpsec.org/projects/guide/5.html

Endret av Nazgul
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...