Log-in beveiligen
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
// Het formulier alleen verwerken als er op een knop met de naam 'actie' is geklikt:
session_start();
if (isset($_POST['actie'])) {
$emailadres = $_POST['e']; // E-mailadres lezen uit formulierveld 'e'
$paswoord = $_POST['w']; // Paswoord lezen uit formulierveld 'w'
$emailadres = strip_tags($emailadres); // HTML-tags en PHP-code verwijderen
$paswoord = strip_tags($paswoord); //HTML-tags en PHP-code verwijderen
$paswoord = trim($paswoord); // Witruimte aan het begin en einde verwijderen
$emailadres = trim($emailadres); // Witruimte aan het begin en einde verwijderen
$melding = "Voer een geldig e-mail adres en paswoord in.";
if (strlen($emailadres) > 100) {
$melding = "Fout e-mail adres.";
} else {
require_once('is_email.inc.php'); // Functie is_email() insluiten
if (is_email($emailadres)) { // E-mailadres controleren met de functie is_email()
$actie = $_POST['actie']; // Uit te voeren actie bepalen
if ($actie === "Inloggen" ) {
// SQL-query definiëren:
if ($actie == "Inloggen") {
$sql = "SELECT * FROM gebruikers WHERE email='" . $_POST["e"] ."' AND wachtwoord='". $_POST["w"]. "'"; }
// Constanten voor mysql_connect() insluiten:
require_once('mysql_connect.inc.php');
// Databaseverbinding openen:
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
// Database 'test' selecteren:
mysql_select_db("wesleybekaert_b") or die("Kon de database niet openen: " . mysql_error());
// Query zonder resultaatset uitvoeren:
$result = mysql_query($sql) or die("Query mislukt: " . mysql_error());
$row=mysql_fetch_array($result);
if(!empty($row)){
$email = $_POST["e"];
$wachtwoord = $_POST["w"];
session_register("email");
session_register("wachtwoord");
// Doorsturen naar beveiligde pagina
header("Location: beveiligd.php");
exit(); }
} if(empty($row)){
$melding = "U hebt geen geldige combinatie van e-mailadres en
wachtwoord opgegeven.<br>Indien u nog niet geregistreerd bent:<br>
<a href=\"registreer.php\">Hier registreren</a>.<br>";
}
// Databaseverbinding sluiten:
mysql_close($verbinding);
} else {
$emailadres = htmlentities($emailadres, ENT_QUOTES);
// Foutmelding afhankelijk van de lengte van het e-mailadres:
if (strlen($emailadres) < 1) {
$melding = "U moet een <strong>e-mailadres</strong> invoeren.";
} else {
$melding = "<strong>$emailadres</strong> is geen geldig e-mailadres.";
$melding .= "Verbeter het e-mailadres of voer een ander e-mailadres in.";
}
}
}
} else {
$emailadres = "";
// Algemene instructies weergeven:
$melding = "Voer een geldig e-mailadres en paswoord in.<br>";
}
?>
// Het formulier alleen verwerken als er op een knop met de naam 'actie' is geklikt:
session_start();
if (isset($_POST['actie'])) {
$emailadres = $_POST['e']; // E-mailadres lezen uit formulierveld 'e'
$paswoord = $_POST['w']; // Paswoord lezen uit formulierveld 'w'
$emailadres = strip_tags($emailadres); // HTML-tags en PHP-code verwijderen
$paswoord = strip_tags($paswoord); //HTML-tags en PHP-code verwijderen
$paswoord = trim($paswoord); // Witruimte aan het begin en einde verwijderen
$emailadres = trim($emailadres); // Witruimte aan het begin en einde verwijderen
$melding = "Voer een geldig e-mail adres en paswoord in.";
if (strlen($emailadres) > 100) {
$melding = "Fout e-mail adres.";
} else {
require_once('is_email.inc.php'); // Functie is_email() insluiten
if (is_email($emailadres)) { // E-mailadres controleren met de functie is_email()
$actie = $_POST['actie']; // Uit te voeren actie bepalen
if ($actie === "Inloggen" ) {
// SQL-query definiëren:
if ($actie == "Inloggen") {
$sql = "SELECT * FROM gebruikers WHERE email='" . $_POST["e"] ."' AND wachtwoord='". $_POST["w"]. "'"; }
// Constanten voor mysql_connect() insluiten:
require_once('mysql_connect.inc.php');
// Databaseverbinding openen:
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
// Database 'test' selecteren:
mysql_select_db("wesleybekaert_b") or die("Kon de database niet openen: " . mysql_error());
// Query zonder resultaatset uitvoeren:
$result = mysql_query($sql) or die("Query mislukt: " . mysql_error());
$row=mysql_fetch_array($result);
if(!empty($row)){
$email = $_POST["e"];
$wachtwoord = $_POST["w"];
session_register("email");
session_register("wachtwoord");
// Doorsturen naar beveiligde pagina
header("Location: beveiligd.php");
exit(); }
} if(empty($row)){
$melding = "U hebt geen geldige combinatie van e-mailadres en
wachtwoord opgegeven.<br>Indien u nog niet geregistreerd bent:<br>
<a href=\"registreer.php\">Hier registreren</a>.<br>";
}
// Databaseverbinding sluiten:
mysql_close($verbinding);
} else {
$emailadres = htmlentities($emailadres, ENT_QUOTES);
// Foutmelding afhankelijk van de lengte van het e-mailadres:
if (strlen($emailadres) < 1) {
$melding = "U moet een <strong>e-mailadres</strong> invoeren.";
} else {
$melding = "<strong>$emailadres</strong> is geen geldig e-mailadres.";
$melding .= "Verbeter het e-mailadres of voer een ander e-mailadres in.";
}
}
}
} else {
$emailadres = "";
// Algemene instructies weergeven:
$melding = "Voer een geldig e-mailadres en paswoord in.<br>";
}
?>
Bij deze code moet iemand registreren en daarna wordt hij direct naar de beveiligde pagina gestuurd.
Nu zou ik willen dat ik eerst mijn goedkeuring moet geven aan de persoon die inlogt, via mail of zo.
Weet iemand waar ik dat kan vinden of hoe ik dat moet programmeren.
Dank bij voorbaat
Als jij eerst toestemming moet geven, dan duurt dat even voordat je de mail hebt gelezen. En dan is de bezoeker waarschijnlijk al lang van de site af.
Verder wil ik je vragen waarom dat je toestemming wil geven om iemand door te sturen na de registratie, als deze zelfde persoon ook zelf (zonder toestemming) kan inloggen na de registratie?
En ik neem aan dat dit geen systeem is dat gebruikt wordt voor tientallen mensen, anders kun je wel heel veel mailtjes controleren.
Waarom controleer je de input (bijvoorbeeld een ingevuld emailadres) op het aantal tekens? Je kijk of het aantal tekens van de variabele minder dan 1 is? Dus eigenlijk bedoel je dat je wil controleren of de variabele niet leeg is?
Gebruik dan empty() om te kijken of een variabele een lege waarde heeft, met deze functie kom je er ook achter als een variabele niet bestaat.
http://nl1.php.net/manual/en/function.empty.php
Gewijzigd op 21/12/2012 19:06:35 door Mark Hogeveen
Waarom al die bewerkingen op je variabelen (regel 6 t/m 11)?
Je controleert niet eens of ze bestaan.
Kies logische namen in je formulier. e en w zeggen niet zo heel veel.
Ook controleer je nergens of $_POST['actie'] wel bestaat.
Uit je query blijkt dat je wachtwoord onbeveiligd / ongecodeerd opslaat. Is erg onveilig.
Het "grappige" is dat je in je query weer de $_POST-waarden gebruikt. Dan heeft regel 6 t/m 11 helemaal niet zo veel zin. Je query is overigens 'lek'/onveilig. Kijk naar mysql_real_escape_string.
Or die is geen foutafhandeling. Bouw een goede in. Een bezoeker zit niet te wachten op een error-code.
Ook regel 41 en 42 zijn niet nodig.
session_register--> This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0. Kortom: is verouderd en in een recente versie van PHP niet meer beschikbaar.
Gebruik binnen php (echo) ', zodat je in HTML " kunt gebruiken (regel 52/54), zodat je niet hoeft te escapen.
Om het voor jezelf overzichtelijk(er) te houden: zorg voor een juiste uitlijning bij { en }. Zoals het hierboven staat is (voor mij) niet snel duidelijk welke { bij } hoort.
De bedoeling van de goedkeuring is omdat op de pagina die erachter zit, informatie staat die niet door iedereen mag gelezen worden.
Daar staan namelijk statistieken van onze voetbalploeg (aantal doelpunten, assists, kaarten,...) Het is niet de bedoeling dat andere ploegen dit allemaal kunnen lezen.
Dus dit systeem geldt eigenlijk voor maximum een 50-tal gebruikers, die ik toelaat om de cijfers te kunnen bekijken.
Toevoeging op 21/12/2012 20:27:12:
@obelix en idefix:
Dit is een script die ik overgenomen heb uit een cursus php. Ik ben niet zodanig onderlegd om uw commentaren te vervullen. Toch bedankt om kritisch te zijn.
Mijn script werkt, dat is alles wat ik nodig heb. Ik zou nu gewoon dit willen uitbreiden met een goedkeuringsscript.
Wesley Bekaert op 21/12/2012 20:20:58:
Mijn script werkt, dat is alles wat ik nodig heb.
Wat kortzichtig. Dat je script lek/onveilig is, maakt je dus niets uit?
Dat het gebruik van session_register afgeraden wordt, omdat dit gaat vervallen, vind je niet erg.
Vroeg of laat kom je jezelf tegen. Je database / site wordt gehackt of werkt niet meer (ivm gebruik van vervallen functies). Waarom dan niet nu al aanpassen?
Wesley Bekaert op 21/12/2012 17:20:17:
Weet iemand waar ik dat kan vinden of hoe ik dat moet programmeren.
Ten aanzien van je vraag: met een beetje moeite kun je dat volgens mij ook zelf invullen. Je wilt niet dat iemand naar beveiligde pagina gaat. Dan verwijder je regel 47 toch gewoon?
Als je wilt dat er een mail naar jouw gestuurd wordt, kan dat met de mailfunctie van PHP (of beter met swiftmailer of phpmailer, maar kwaliteit vind je niet zo belangrijk... ;-) ).
Dan zul je nog het gedeelte hebben over het geven van jouw goedkeuring. Of daar copy/paste mogelijk is?
Ik heb een database met activatie codes... Voor mijn script, deel ik codes uit (dit is een voorbeeld btw) aan mijn vrienden of andere die de website mogen bekijken. Wanneer zij registreren met deze activatie code, wordt er in de database gekeken of deze wel bestaat. Ja: user geregistreerd, Nee: Code bestaat niet en wordt je niet geregistreerd en kan je niet inloggen. Is de code al gebruikt? Dan kan je daarvoor een logboek maken :)