Tambien algo asi:
Código PHP:
function generateFormToken($formName)
{
$token = md5(uniqid(microtime(), true));
$_SESSION[$formName.'_token'] = $token;
return $token;
}
function verifyFormToken($formName)
{
$index = $formName.'_token';
// There must be a token in the session
if (!isset($_SESSION[$index])) return false;
// There must be a token in the form
if (!isset($_POST['token'])) return false;
// The token must be identical
if ($_SESSION[$index] !== $_POST['token']) return false;
return true;
}
y luego en el formulario:
Código PHP:
$newToken = generateFormToken('loginForm');
... Display Form ...
echo "<input type='hidden' name='token' value='$newToken'>";
... Rest of Form ...
y en la action:
Código PHP:
if (!verifyFormToken('loginForm')) {
die('CSRF Attack detected OR External form processing detected');
}
... Form Processing ...
Esto es muy bueno porque es una manera funcional y general para bloquear tambien CSRF ataques.
Chao!