Login scriptje.. Veilig?
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.
Code (php)
Kom maar op met kritiek enzo :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
}
?>
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!
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
moet denk ik zijn
verder kan je beter
vervangen door
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.
Veel plezier en succes!
Regel 2 zou ik vervangen door dit
if($_SERVER['REQUEST_METHOD'] == 'POST')
In regel 3 check je 2 maal hetzelfde
Op regel 5: die() is niet netjes. Je script stopt direct.
En ik denk dat je nog wel enige notices krijgt.
Dus zet dit eens bovenin je script.
Gewijzigd op 01/01/1970 01:00:00 door donagansta
donagansta schreef op 08.01.2009 18:09:
Ahh nice :) dank je wel voor je snelle reactie..
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']) ??
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:
$_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.Soms wordt namelijk de submitbutton niet meegezonden waardoor je bezoeker het formulier te zien krijgt die hij of zij net ingevuld heeft.
Gewijzigd op 01/01/1970 01:00:00 door Midas
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 :)
Midas schreef op 08.01.2009 18:11:
.... Ze doen allebei hetzelfde, controleren of het formulier gepost is ...
Niet helemaal waar.
if($_SERVER['REQUEST_METHOD'] == 'POST')
Kijkt of het formulier is gepost.
if ($_POST['submit'])
Kijkt of $_POST['submit'] true is.
donagansta schreef op 08.01.2009 18:13:
Zo werkt het dus niet, de omvang van de code zegt helemaal niets noppes nada over de veiligheid.ik meestal zoiets heb van: Hoe compacter, hoe duidelijker, hoe veiliger.
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.
-------
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 :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
//includes
require('config.php');
require_once('connect.php');
//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
}
?>
//includes
require('config.php');
require_once('connect.php');
//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?
Help me out please :)
Gewijzigd op 01/01/1970 01:00:00 door donagansta
donagansta schreef op 08.01.2009 22:41:
... omdat 1 of andere moddereter vind dattie hierbij hoort.. ofzo..
Respectvol, vind je niet?
En, voor het geval je het niet had gelezen, SanThe is de naam voor jou.
Ik ben het er niet mee eens. Maar ik zie niet in wat deze discussie mij kan opleveren, dus houd ik maar op ;)
donagansta schreef op 08.01.2009 22:49:
Aangepast,.. respectvol? Ja hoor, zie er niets in staan wat niet respectvol is.
Ik ben het er niet mee eens. Maar ik zie niet in wat deze discussie mij kan opleveren, dus houd ik maar op ;)
Ik ben het er niet mee eens. Maar ik zie niet in wat deze discussie mij kan opleveren, dus houd ik maar op ;)
Ben je nou zo simpel of doe je alleen maar zo?
Even in jouw taal:
Ik zie trouwens niet wat jou helpen met je topic mij oplevert, dus ik hou er maar mee op. Succes verder.
Ik niet.
Prima dat je mij niet wil helpen, maar doe niet zo raar oO.
donagansta schreef op 08.01.2009 22:57:
Zucht. Iemand heeft zin in een discussie.
Ik niet.
Prima dat je mij niet wil helpen, maar doe niet zo raar oO.
Ik niet.
Prima dat je mij niet wil helpen, maar doe niet zo raar oO.
Iemand ... ? Nog een geval van geen respect tonen.
Iemand anders nog een opmerking?
simpel inlog systeem", ik meen dat een naamgenoot van mij een mooie basis heeft geschreven waar je wel wat mee kan :-)
Je mag trouwens wel wat respect tonen aan iemand die meer verstand van zaken heeft dan jij, donagansta :-)
"donagansta", google eens op "Je mag trouwens wel wat respect tonen aan iemand die meer verstand van zaken heeft dan jij, donagansta :-)
donagansta schreef op 08.01.2009 22:41:
??Ik verplaats hem hier maar heen omdat 1 of andere moddereter (Genaamd SanThe) vind dattie hierbij hoort.. ofzo..
wat is een moddereter? Wat is dattie?
Liever één of andere moderator, dan een respect loze newbie.
Gewijzigd op 01/01/1970 01:00:00 door Dennis Mertens