// controleren van velden account gegevens
if($_POST['user'] != "" AND $_POST['email'] != "" AND $_POST['pass'] != "") {
$sql = mysql_query("SELECT gebruikersnaam FROM leden WHERE gebruikersnaam='".$_POST['user']."'");
if(mysql_num_rows($sql) == 0) {
if(preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$/i", $_POST['email'])) {
$account = 'oke';
}else{
$fout .= '<small>Het opgegeven emailadres is niet geldig</strong></small><br>';
}
}else{
$fout .= '<small>De opgegeven gebruikersnaam is reeds in gebruik</strong></small><br>';
}
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Account gegevens</strong></small><br>';
}
// controleren van velden persoonlijke gegevens
if($_POST['voornaam'] != "" AND $_POST['achternaam'] != "" AND $_POST['postcode'] != "" AND $_POST['huisnr'] != "" AND $_POST['straat'] != "" AND $_POST['woonplaats'] != "") {
$persoonlijk = 'oke';
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Persoonlijke gegevens</strong></small><br>';
}
// als alles correct is afgehandeld
if($account == 'oke' && $persoonlijk == 'oke') {
Gebruik ook in je eerste query mysql_real_escape_string.
Een md5 bevat nooit gekke tekens die je database kunnen "hacken", dus mysql_real_escape_string(md5(...)) is overbodig. Gebruik alleen md5(blabla) .
MD5 word trouwens tegenwoordig gezien als "onveilig". Gebruik 1 van de vele andere algoritmes van [php]hash[/php]() , óf gebruik in ieder geval een SALT.
Je kan trouwens ook:
<?php
if($sql = true){
?>
herschrijven naar:
<?php
if($sql))
//of, voor false:
if(!$sql)){
?>
In je eerste regel zou ik als ik jou was gebruik maken van true of false, en niet de STRING '1'. Dus
<?php
// === betekent gelijk EN hetzelfde type
if($_CONFIG['database_active'] === true) {
?>
Heb je misschien een voorbeeldje hoe je een goed beveiligd wachtwoord maakt?
Kan je bijvoorbeeld ook een md5 en een hash samen doen? Of zal dat niet veel uitmaken kwa sterkte?
Agree met Eddy. Je kan ook je salt dynamisch laten genereren bij het registreren, in een aparte database of tabel opslaan. Die haal je dan bij het "decrypten" weer op. En je kan het nog meer uitbreiden met zogeheten pepper, daarbij maak je nog een extra string aan in een apart tekst bestand buiten de webserver. dan krijg je uiteindelijk iets als (oud concept dingetje):
<?php
/*encryption functie*/
function custom_hash($pass, $username) {
/*Pepper ophalen uit bestand */
$pepperfile = "pepper.txt";
$fh = fopen($pepperfile, 'r');
$pepper = fread($fh, filesize($pepperfile));
fclose($fh);
/*salt ophalen uit database*/
$query = "SELECT Salt FROM salt WHERE Gebruikersnaam = '".$username."'";
$result = mysql_query($query);
$rij = mysql_fetch_assoc($result);
$salt = $rij['Salt'];
SanThe doelt waarschijnlijk op jouw initiele post waarin jij alles een md5 encryptie geeft.
Dan maakt het niet meer uit of je waarde nou 2, 5, 7 of 12 tekens heeft, de hash waarde (md5) wordt altijd een combinatie van 32 tekens, wat niet gaat passen in een varchar veld met een maximale lengte van 7.
?
Onbekende gebruiker
15-07-2009 11:34
Het gaat hier om mysql, dus een fout zou je daar niet voor terug krijgen enkel dat niet alles wordt opgeslagen 8-)