5546 sujets

Sémantique web et HTML

Bonjour à tous,

Je n'arrive pas à créer un Token de sécurité pour mon formulaire de contact

Voici le HTML et le PHP


<!-------------------- HTML -------------------------->

<?php
//On démarre les sessions
		session_start();
//On génére un jeton totalement unique
$tokenID = md5(uniqid(microtime(), true) + time());
//Et on le stocke
$_SESSION['tokenID'] = $tokenID;

?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR" prefix="og:  http://ogp.me/ns#"  class="no-js">
<head>
<title>Me contacter | Jean</title>
</head>
<body>

<div role="form" class="navsac-form" id="nasandse-form" lang="fr-FR" dir="ltr">
<form action="navsac.php" method="post" id="nasandse-form" class="navsac-form navsac" autocomplete="off">

<div class="nasa-form" class="clearfix">
<input type="hidden" name="tokenID" value="<?php echo $tokenID;?>">
<div class="se-form">
<div class="form-col">Nom<br />
<span class="nasandse-input name"><input type="text" name="name" value="" size="40" class="nasa-input name" required /></span></div>
</div>
<div class="se-form">
<div class="form-col">E-mail<br />
<span class="nasandse-input email"><input type="email" name="email" value="" size="40" class="nasa-input mel" required /></span></div>
</div>
<div class="se-form">
<div class="form-col-full">Message<br />
<span class="nasandse-input message"><textarea name="message" value="" cols="40" rows="10" class="nasa-input msg" required /></textarea></span></div>
</div>
<div class="se-form">
<div class="form-col-full">
<input type="submit" value="Envoyer" id="submit" class="nasa-input button" /></div>
</div>
</div>
</form>
</div>

</body>
</html>



<!-------------------------- Traitement du formulaire -------------------->

<?php


if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) {
	header('Allow: POST');
	header('HTTP/1.1 405 Method Not Allowed');
	header('Content-Type: text/plain');
	exit;
}

session_start();

/**
 * [Sécurise les champs du formulaire qui ne doivent pas contenir de html]
 */
function mailCleanChamps($champ) {
	return htmlentities(trim(strip_tags(stripslashes($champ))), ENT_NOQUOTES, "UTF-8");
}

/**
 * [Sécurise les champs de texte du formulaire susceptibles de contenir du html (textareas)]
 */
function mailCleanMessage($champ) {
	return strip_tags(htmlentities(trim(stripslashes($champ)), ENT_NOQUOTES, "UTF-8"));
}

/**
 * [Vérifie le token de sécurité du formulaire]
 */
 function mailCheckToken($tokenID) {
	if ($tokenID === null || !isset($_SESSION['tokenID']) || !isset($tokenID) || $_SESSION['tokenID'] !== $tokenID)
		return false;
	else
		return true;
}


$Nom = isset($_POST['name']);
$Email = isset($_POST['email']);
$Message = isset($_POST['message']);
$tokenID = $_POST['tokenID'];

$_SESSION['mailChamps'] = [
	'name' => $Nom,
	'email' => $Email,
	'message' => $Message
];

$retour = array();


// Si le champ nom est vide
if (empty($Nom)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Veuillez remplir le champ « Nom ».',
		'type' => 'alert'
	);

// Si le champ message est vide
elseif (empty($Message)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Veuillez remplir le champ « Message ».',
		'type' => 'alert'
	);

// Si le champ email est vide ou ne correspond pas à la syntaxe requise de type xxxx@xxxx.xxx
elseif (empty($Email) || !filter_var($Email, FILTER_VALIDATE_EMAIL)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Votre adresse e-mail n\'est pas complète.',
		'type' => 'alert'
	);



$fomulaireErreurs = array_filter($retour);
if (empty($fomulaireErreurs)) :

	$mailDestinataire  = 'jean.mel@gmail.com';

	$mailContenu = array();
	$mailContenu[] = 'Nom : '.$Nom.'<br />';
	$mailContenu[] = 'Mail : '.$Email.'<br />';
	$mailContenu[] = '<br />Message : <br />'.$Message;
	$mailContenu = join($mailContenu);

	$mailObjet = 'Jean - mel de '.$Nom;

	$mailHeaders  = 'From: jean<jean@domain.fr>'."\n";
	$mailHeaders .= 'Reply-To: '.$Email."\n";
	$mailHeaders .= 'MIME-Version: 1.0'."\n";
	$mailHeaders .= 'Content-type: text/html; charset="utf-8"'."\n";
	$mailHeaders .= 'Content-Transfer-Encoding: 8bit'."\n";

	// Envoi du mail
	if (mail($mailDestinataire, $mailObjet, $mailContenu, $mailHeaders)) :
		$retour = array(
			'title' => 'Envoi réussi',
			'content' => 'Merci '.$Nom.' ! Votre mel a été envoyé. Vous recevrez une réponse dès que possible !',
			'type' => 'success'
		);
		unset($_SESSION['mailChamps']);
	else :
		$retour = array(
			'title' => 'Erreur d\'envoi',
			'content' => 'Une erreur s\'est produite lors de l\'envoi de l\'mel. Merci de réessayer plus tard',
			'type' => 'alert'
		);
	endif;
endif;

echo json_encode($retour);



Merci d'avance.