Zou dit genoeg zijn voor het genereren van een code en qua veiligheid?
<?php
// phpmailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';
require 'connection.inc.php';
// variableen ophalen
$userName = $_GET['uid'];
$id = $_GET['id'];
$email2FA = $_POST['email2FA'];
$emailDB = $_GET['email'];
// klikvalidatie
if(!isset($_POST['2FAEnable'])) {
header('Location: ../adjust.php?error=invalidrequest');
exit();
}
else {
// code genereren
function randomtoken($size) {
$size = intval($size);
if($size == 0) {
return NULL;
}
$charSet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($charSet);
$str = '';
$i = 0;
while(strlen($str) < $size) {
$num = rand(0, ($len-1));
$tmp = substr($charSet, $num, 1);
$str = $str . $tmp;
$i++;
}
return $str;
}
$token = randomtoken(6);
$expires = date("U") + 300;
// controleren of email leeg is gelaten
if(empty($email2FA)) {
header('Location: ../2FA-Enable.php?error=emptyfields&request=valid');
exit();
}
else {
// controleren of de email geldig is
if(!filter_var($email2FA, FILTER_VALIDATE_EMAIL)) {
header('Location: ../2FA-Enable.php?error=invalidemail');
exit();
} // controleren of de email geregistreerd is
else if($email2FA !== $emailDB) {
header('Location: ../2FA-Enable.php?error=emailnotregistered');
exit();
}
else {
$cookieID = setcookie('expire', $userName, time() + (86400 * 90), "/");
$hashedToken = password_hash($token, PASSWORD_DEFAULT);
$sql = 'INSERT INTO 2fa (cookieID, token, expire date) VALUES (?, ?, ?)';
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)) {
echo 'mysqli insert token mislukt', error_get_last();
exit();
}
else {
mysqli_stmt_bind_param($stmt, "sss", $cookieID, $hashedToken, $expires);
mysqli_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
mysqli_stmt_close($stmt);
mysqli_close($conn);
// mail verzenden met de code
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = 2;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Host = 'mail.axc.nl'; // Specify main and backup SMTP servers
$mail->Port = 465; // TCP port to connect to
$mail->isHTML(true); // Set email format to HTML
$mail->Username = '
[email protected]'; // SMTP username
$mail->Password = 'mijn wachtwoord'; // SMTP password
//Recipients
$mail->setFrom('
[email protected]');
$mail->addAddress($userEmail); // Add a recipient
$mail->addReplyTo('
[email protected]', 'Ondersteuning');
//Content
$mail->Subject = '2-Staps Autorisatie jinvantongeren.nl';
$mail->Body = "<p>Er is een verzoek binnengekomen om 2-Staps Autorisatie in te voeren op uw account. \n\r Als u dit niet was, wordt u aangeraden om uw account te <a href='jinvantongeren.nl/adjust.php'>Beveiligen</a>\n\r Uw code is: ".$token."</p><br>Met vriendelijke groeten, <br> Jin van Tongeren";
$mail->AltBody = 'Er is een verzoek binnengekomen om 2-Staps Autorisatie in te voeren op uw account. \r\n. De link is: \r\n '.$url.' \r\n Met vriendelijke groeten, \r\n Jin van Tongeren ';
$mail->send();
echo '<meta http-equiv="refresh" content="0; URL=https://jinvantongeren.nl/reset-password?reset=success&request=valid">';
exit();
}
}
}
}
}