Ik ben een beetje aan het scripten geweest, en kwam tot het onderste. Aangezien ik niet echt op de hoogte ben van het veilig/niet veilig, en of het hackproof is enzo, wil ik iemand met iets meer ervaring vragen of het verwerken van dit formuliertje veilig is.
<?php
if ($_POST['submit']) {
if(($_POST['usr'] == "") or ($_POST['usr'] == "")) {
echo "Er zijn 1, of meer velden, niet ingevuld.";
die();
}
if(($_POST['usr'] == "user") && ($_POST['pass'] == "pass") {
//wanneer ingelogd
}
else {
//formulier
}
?>
Kom maar op met kritiek enzo :)
De eerste opzet is goed, probeer alleen wat meer functies te gebruiken voor de dingen die je wil controleren. Die vangen vaak wat meer af dan jij in eerste instantie doet:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if((empty($_POST['usr']) or (empty($_POST['usr'])) {
echo "Er zijn 1, of meer velden, niet ingevuld.";
die(); //wil je echt je script helemaal stilleggen? beter is het verzamalen van je errors en deze dan later netjes weergeven.
}
//let op deze else hiervoor
elseif(($_POST['usr'] == "user") && ($_POST['pass'] == "pass") {
//wanneer ingelogd
}
else {
//formulier
}
?>
Verder heb ik nog wat commentaar in je scriptje gezet. Succes!
<?php
if(($_POST['usr'] == "") or ($_POST['usr'] == ""))
?>
moet denk ik zijn
<?php
if(($_POST['usr'] == "") or ($_POST['pass']) == "")
?>
verder kan je beter
<?php
if ($_POST['submit'])
?>
vervangen door
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
?>
Soms wordt namelijk de submitbutton niet meegezonden waardoor je bezoeker het formulier te zien krijgt die hij of zij net ingevuld heeft.
Ook is die() niet de beste methode, omdat je script direct gestopt wordt. Zorg er gewoon voor dat je script niet meer door gaat met inloggen, dan is er niets aan de hand en kan alles gewoon door gaan.
En dan inhoudelijk: Op deze manier inloggen is vrij statisch, je zult voor ieder account een nieuw stuk script moeten schrijven. Ik weet niet hoe nieuw je bent in de wereld van PHP, maar als dit een van je eerste creaties is heb je het prima gedaan. Nu zou je het kunnen gaan uitbreiden met een database, veiliger maken door wachtwoorden gehashed op te slaan, registeren, wachtwoord vergeten, noem maar op.
die(); verplaats ik later voor een functie waarin ik het scriptje wil gebruiken.
wat is het verschil tussen:
($_SERVER['REQUEST_METHOD'] == "POST") of ($_POST['submit']) ??
Midas schreef op 08.01.2009 18:06
Soms wordt namelijk de submitbutton niet meegezonden waardoor je bezoeker het formulier te zien krijgt die hij of zij net ingevuld heeft.
$_SERVER is een zogenaamde superglobal. Google daar maar eens op, kan je een hoop van leren. Ze doen allebei hetzelfde, controleren of het formulier gepost is, maar dit is de manier waarop het hoort.
In het speciaal Midas.
Ja ik ben half nieuw in het PHP gebeuren. Leer mezelf af en toe eens wat. Ik ben ondertussen inderdaad aan het uitbreidden naar MySQL, alleen aangezien ik meestal zoiets heb van: Hoe compacter, hoe duidelijker, hoe veiliger. Daarom heb ik me daar nog niet in verdiept.
Van mij mag dit topic gesloten worden..
Bedankt allemaal :)
ik meestal zoiets heb van: Hoe compacter, hoe duidelijker, hoe veiliger.
Zo werkt het dus niet, de omvang van de code zegt helemaal niets noppes nada over de veiligheid.
Zorg er in elk geval voor dat je tijdens het bouwen en testen iedere fout en/of waarschuwing op het scherm krijgt, dan krijg je een betere indruk over de code dan wanneer je domweg je kop in het zand steeks door alle fouten e.d. te onderdrukken. Alles wat fout kan gaan, zal ook fout gaan.
En vergeet niet om alles te verbieden wat niet noodzakelijk is voor een gebruiker.
Ik verplaats hem hier maar heen omdat 1 of andere moddereter (Genaamd SanThe) vind dattie hierbij hoort.. ofzo..
-------
Hoi allemaal :)
Ben ik weer :P Ik heb het advies even opgevolgd en heb er wat MySQL in gegooid...
Maarja, of het nu nog zo veilig is.. ik heb geen idee. Hoor de wildste geruchten over mysql injection enzo :P Daarom post ik het hier toch nog maar even :)
//verzenden van het formulier
if ($_SERVER['REQUEST_METHOD'] == "POST") {
//testen of iets leeg is
if(empty($_POST['usr'])) {
$fout = "- U bent vergeten uw gebruikersnaam in te vullen!<br>";
}
if(empty($_POST['pass'])) {
$fout .= "- U bent vergeten uw wachtwoord in te vullen!<br>";
}
if(!isset($fout)) { //Waneer er geen fouten zijn
$sql = "SELECT * FROM login WHERE gebruikersnaam = '" . $_POST['usr'] . "' AND password = '" . $_POST['pass'] . "'" ;
$qry = mysql_query($sql);
if(mysql_num_rows($qry) > 0){
$gebruiker = $_POST["usr"];
$wachtwoord = $_POST["pass"];
$_SESSION['gebruiker'] = $gebruiker;
echo("Aangemeld :)");
}
else {
echo("Uw gebruikersnaam komt niet overeen met uw wachtwoord! Klik <a href=\"javascript:back();\">hier</a> om terug te keren");
}
}
else {
echo "Error $fout<br />Klik <a href=\"javascript:back();\">hier</a> om terug te keren";
}
}
else {
//formulier
}
?>
Mjoah ik heb zelf zoiets beetje gepruts met die sessie.. en volgens mij ook niet helemaal veilig omdat toch iedereen een sessie aan kan maken met de gebruikersnaam?