Я читаю книгу Криса Шиффлет, «Основная безопасность PHP». Существует глава о CSRF, где автор рекомендует использовать токен для предотвращения CSRF. Код в книге говорит, чтобы добавить маркер в виде мы используемКод CSRF не работает
<?php
session_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
?>
<form action="buy.php" method="POST">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<p>
Item:
<select name="item">
<option name="pen">pen</option>
<option name="pencil">pencil</option>
</select><br />
Quantity: <input type="text" name="quantity" /><br />
<input type="submit" value="Buy" />
</p>
</form>
и маркер можно проверить с помощью простого условного оператора.
<?php
if (isset($_SESSION['token']) && $_POST['token']== $_SESSION['token'])
{
echo $_POST['token'];
echo "form passed";
}
Но приведенный выше код не работает. Сообщение «form прошло» не отображается. Что не так с приведенным выше кодом ?. Первый набор кодов генерирует токен, но сообщение об успехе отсутствует.
спасибо. Это сработало. Интересно, почему они публикуют книги с такой большой ошибкой. Еще раз спасибо. – 2014-09-20 16:43:24
@ManishB Добро пожаловать! – MH2K9