edit: sorry in verkeerde categorie geplaatst! :|
Hoi ik heb het simpel inlogscriptje volgens de tutorial hier op phphulp gebruikt: http://www.phphulp.nl/php/tutorials/8/155/
Dat werkt met wat kleine aanpassingen prima. echter heb ik nu een gek probleempje en kom er niet achter wat nu de fout is.

Na het invullen van gebruikersnaam en password wordt op de pagina login_2.php gechecked of de gebruike en het ww kloppen. Zo niet krijgt men een melding. In onderstaand script wordt er dan eenregel tekst getoond met een link naar de pagina terug (java script).
Dit werkte eerst prima maar door wellicht iets te veel weggehaald te hebben in het script nu dus niet meer. De $text wordt wel getoond maar niet de java link terug?
Wie ziet de fout. Thanks. Is dit script overigens bij gebruik door slechts een enkele admin gebruiker veilig genoeg? Of moet er nog wat verbeterd worden? Ik heb de zelfde opzet aangehouden als in de tutto:

inlog pagina
verwerk de inlog in inlog_2.php
beveiliging op de beveiligde pagina
uitlog pagina
mysql db met wachtwoorden


<?php
ob_start();
?> 
<?php session_start();?>
<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL); 
?>
<?php 
if(!empty($_POST)){ 
include("connect.php"); 
$query = "SELECT * FROM users WHERE email='" . $_POST["email"]  ."' AND wachtwoord='". $_POST["wachtwoord"] . "'"; 

$result = mysql_query($query); 

if(mysql_num_rows($result) > 0){ 
$user = $_POST["email"]; 
$wachtwoord = $_POST["wachtwoord"]; 
$_SESSION['user'] = $user; 
$_SESSION['wachtwoord'] = $wachtwoord; 

header("Location: admin_cms.php"); 
exit(); 
} 
else { 
// hier gaat denk ik iets fout?
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>"; 
die($text); 
} } 
else{ 
//pagina verkeerd aangeroepen 
header("Location: login.php"); 
}?> 
<?php
ob_end_flush();
?> 
@Dennis Vraag ik mezelf ook wel eens af :) Maar het staat er zo omdat ik het script in een pagina gebruik en de betreffende items zover ik egrrep altijd als eerste op de pagina dienen te staan.

@Kevin
Het werkt nog niet helaas. Krijg nu de melding naam en wachtwoord niet goed
mrhocoma, wat ik heb aangepast is dus dat hij het wachtwoord controleerd met een md5 variant van wat er ingevuld is.
Even een opmerking tussendoor: In bovenstaande scripts zit geen foutafhandeling en het is niet veilig.
@Kevin maar die is nooit gelijk aan het met md5 opgeslagen wachtwoord in de database?

@SanThe wat kan er beter?
Tikkes schreef op 14.12.2008 09:19
mrhocoma: waarom open en sluit je zoveel keer de php tags?

PS: Java != Javascript!

Je bedoeld wrs "PS: Java !== JavaScript" XD

<?php
ob_start();
session_start();
ini_set ('display_errors', 1);
error_reporting (E_ALL); 

if(!empty($_POST)){
    include("connect.php");
    $user = $_POST["email"]; 
    $wachtwoord = md5($_POST["wachtwoord"]); 
    echo ''.$wachtwoord'<br /><br />';
    $query = "SELECT * FROM users WHERE email='" . $user  ."' AND wachtwoord='". $wachtwoord . "'"; 
    $result = mysql_query($query); 
    if(mysql_num_rows($result) > 0){     
        $_SESSION['user'] = $user; 
        $_SESSION['wachtwoord'] = $wachtwoord; 
        header("Location: admin_cms.php"); 
        exit(); 
    } 
    else 
    { 
        $text = "U hebt geen goede combinatie van gebruikersnaam en wachtwoord gebruikt! <a href='#' onclick='history.go(-1)' >Ga terug naar de inlog pagina</a>";
        die($text); 
    } 
} 
else
{ 
    header("Location: login.php"); 
}

ob_end_flush();
?> 


draai de code nu eens en vergelijk de uitkomst eens met wat er in de database staat.
Heb de code geprobeerd maar krijg nu een witte lege pagina te zien. Hoe bedoel je de uitkomst vergelijken (die zie ik toch niet?).
zal denk ik een foutje aan mijn kant zijn:


<?php
ob_start();
session_start();
ini_set ('display_errors', 1);
error_reporting (E_ALL); 

if(!empty($_POST)){
    include("connect.php");
    $user = $_POST["email"]; 
    $wachtwoord = md5($_POST["wachtwoord"]); 
    echo ''.$wachtwoord.'<br /><br />';
    $query = "SELECT * FROM users WHERE email='" . $user  ."' AND wachtwoord='". $wachtwoord . "'"; 
    $result = mysql_query($query); 
    if(mysql_num_rows($result) > 0){     
        $_SESSION['user'] = $user; 
        $_SESSION['wachtwoord'] = $wachtwoord; 
        header("Location: admin_cms.php"); 
        exit(); 
    } 
    else 
    { 
        $text = "U hebt geen goede combinatie van gebruikersnaam en wachtwoord gebruikt! <a href='#' onclick='history.go(-1)' >Ga terug naar de inlog pagina</a>";
        die($text); 
    } 
} 
else
{ 
    header("Location: login.php"); 
}

ob_end_flush();
?> 


ik wil tevens wel benadrukken dat deze code niet veilig is en ook zeker niet gebruikt zal moeten worden in de praktijk
Waarom geef je het dan als het niet gebruikt moet worden?

Geef dan gewoon de correcte code.

En waarom nou weer ''. aan het begin van een echo.
De waarde van de post email in de variabele user kopieren. Hetzelfde met de variabele wachtwoord.

En een geheel onnodige variabele aanmaken genaamd text die je alleen met de die mee geeft... ???

Natuurlijk geen gebruikers gegevens mee geven in de session. Gewoon het user id, en hash code die ook wordt opgeslagen in de database. Hierdoor wordt het ook onmogelijk om op 2 plekken tegelijk ingelogd te zijn, omdat er maar 1 hash code is.
mijn db code:55b5761037b8c0d230b8
de code uit het script: 55b5761037b8c0d230b8fa02d81f8814

over de veiligheid van de code:
Is het dan niet handiger om iets beters te maken van dit script? Nu ben ik wel leuk bezig maar als het niet veilig is heb ik of een ander er niet veel aan? Zoals ik helemaal aan het begin aangegeven heb, heb ik dit opgebouwd aan de hand van de tutorial. Die is dan wellicht aan vervanging toe (delete)?

Heb inmiddels dit script in een site ingebouwd, jammer als nu alles weer helemaal opnieuw moet. :|

En wat is er niet veilig dan?

Reageren