Ik wou jullie even mijn PHP script laten controleren (als jullie tijd hebben). Ik heb de laatste tijd veel doorgenomen bij w3schools.com en andere php informatie websites. Zouden jullie even willen kijken of mijn script veilig is? Kwa SQL-injections etc. (bruteforce protection zit erop :-), en al uitgetest)
<?php
if (date("d-m-Y") <= "26-03-".date("Y"))
{
$_SERVER['unix'] = strtotime("UTC");
}
if (date("d-m-Y") >= "26-03-".date("Y"))
{
$_SERVER['unix'] = strtotime("UTC +1 hour");
}
function loggedIn()
{
if (!empty($_SESSION['id']) && is_numeric($_SESSION['id']))
{
return true;
}
else
{
return false;
}
}
function getIpadress()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$_SERVER['ip'] = $_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$_SERVER['ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$_SERVER['ip'] = $_SERVER['REMOTE_ADDR'];
}
}
function checkWrongAttempts() {
include($_SERVER['DOCUMENT_ROOT'].'/paneel/includes/init.php');
getIpadress();
$ip = sha1($_SERVER['ip']);
$datum = $_SERVER['unix'];
$searchForWrongAttempts = $link->query("SELECT * FROM `paneel_foutepogingen` WHERE `ip`='$ip' ORDER BY `datum_foutepoging` DESC");
if (!$searchForWrongAttempts)
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
else
{
if ($searchForWrongAttempts->num_rows > 3)
{
$wrongAttempts = $searchForWrongAttempts->fetch_assoc();
if ($_SERVER['unix'] <= strtotime('+15 minutes', $wrongAttempts['datum_foutepoging']))
{
$searchForLoginLog = $link->query("SELECT * FROM `paneel_logs` WHERE `ip`='$ip' AND `bericht`='Te veel foute pogingen achter elkaar om in te loggen/registreren/wachtwoord veranderen' ORDER BY `datum_log` DESC");
if (!$searchForLoginLog)
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
else
{
$loginLog = $searchForLoginLog->fetch_assoc();
if ($_SERVER['unix'] >= strtotime('+15 minutes', $loginLog['datum_log']) || $searchForLoginLog->num_rows === 0)
{
$insertLog = $link->query("INSERT INTO `paneel_logs` (`ip`, `bericht`, `plaats`, `datum_log`) VALUES ('$ip', 'Te veel foute pogingen achter elkaar om in te loggen/registreren/wachtwoord veranderen', 'index', '$datum')");
if (!$insertLog)
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
else
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
}
else
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
}
}
else
{
$deleteWrongAttempts = $link->query("DELETE FROM `paneel_foutepogingen` WHERE `ip`='$ip'");
if (!$deleteWrongAttempts)
{
echo '0+Er is een fout opgetreden, kom later terug';
exit();
}
}
}
}
}
function login($gebruikersnaam, $wachtwoord)
{
include($_SERVER['DOCUMENT_ROOT'].'/paneel/includes/init.php');
checkWrongAttempts();
getIpadress();
$ip = sha1($_SERVER['ip']);
$datum = $_SERVER['unix'];
$gebruikersnaam = $link->real_escape_string($gebruikersnaam);
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='$gebruikersnaam'");
if (!$searchForUser)
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om in te loggen';
}
else
{
echo '0+Probeer het later opnieuw om in te loggen';
}
}
else
{
if ($searchForUser->num_rows === 1)
{
$userDetails = $searchForUser->fetch_assoc();
if (password_verify($wachtwoord, $userDetails['wachtwoord']))
{
$updateUserAccount = $link->query("UPDATE `leden` SET `laatst_online`='$datum' WHERE `gebruikersnaam`='$gebruikersnaam'");
if (!$updateUserAccount)
{
echo '0+Probeer het later opnieuw om in te loggen';
}
else
{
$_SESSION['id'] = $userDetails['id'];
echo '1+Je bent succesvol ingelogd';
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om in te loggen';
}
else
{
echo '0+Er zijn foute log in gegevens ingevuld';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om in te loggen';
}
else
{
echo '0+Deze gebruiker kan niet worden gevonden';
}
}
}
}
function register($gebruikersnaam, $wachtwoord, $wachtwoordher, $emailadres)
{
include($_SERVER['DOCUMENT_ROOT'].'/paneel/includes/init.php');
checkWrongAttempts();
getIpadress();
$ip = sha1($_SERVER['ip']);
$datum = $_SERVER['unix'];
$gebruikersnaam = $link->real_escape_string($gebruikersnaam);
$wachtwoord = $link->real_escape_string($wachtwoord);
$emailadres = $link->real_escape_string($emailadres);
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='$gebruikersnaam'");
if (!$searchForUser)
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '0+Probeer het later opnieuw om te registreren';
}
}
else
{
$userDetails = $searchForUser->fetch_assoc();
if (strlen($gebruikersnaam) >= 2 && strlen($gebruikersnaam) <= 15)
{
if ($searchForUser->num_rows === 0)
{
if ($wachtwoord === $wachtwoordher)
{
if (preg_match('/\A(?=[\x20-\x7E]*?[A-Z])(?=[\x20-\x7E]*?[a-z])(?=[\x20-\x7E]*?[0-9])[\x20-\x7E]{6,}\z/', $wachtwoord) && strlen($wachtwoord) > 8)
{
if (filter_var($emailadres, FILTER_VALIDATE_EMAIL))
{
$checkPostedEmail = $link->query("SELECT * FROM `leden` WHERE `emailadres`='$emailadres'");
if (!$checkPostedEmail)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
$wachtwoord = password_hash($wachtwoord, PASSWORD_DEFAULT);
$createUserAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `registratie_datum`) VALUES ('$gebruikersnaam', '$wachtwoord', '$emailadres', '$ip', '$datum')");
if (!$createUserAccount)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '1+Je account is aangemaakt, je kan nu inloggen';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later om te registreren';
}
else
{
echo '0+Dit emailadres is niet geldig';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '0+Je wachtwoord moet bestaan uit kleine en grote letters, nummers, symbolen en grote zijn dan 8 tekens';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '0+De wachtwoorden komen niet overeen';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '0+Deze gebruiker helaas bestaat al';
}
}
}
else
{
$insertWrongLogin = $link->query("INSERT INTO `paneel_foutepogingen` (`ip`, `datum_foutepoging`) VALUES ('$ip', '$datum')");
if (!$insertWrongLogin)
{
echo '0+Probeer het later opnieuw om te registreren';
}
else
{
echo '0+De gebruikersnaam moet tussen de 2 en 15 tekens bestaan';
}
}
}
}
?>
Ik hoor graag verbeter punten! :D
[size=xsmall]Toevoeging op 12/03/2017 18:41:16:[/size]
TOEVOEGING:
IP adres wordt gehasht met SHA1 om de volgende reden: Voor het spel waar ik dit voor maak, controleren ze op of ik ips, keyloggers etc. achterhaal. Dus van hun moest ik IP doen met SHA1 of een andere hash.