Токен сеанса PHP можно использовать несколько раз? - PullRequest
2 голосов
/ 17 января 2011

Я получил страницу A, которая является обычной страницей HTML, и страницу, которая является страницей ответов AJAX.И я хочу предотвратить CSRF-атаки токенами.Допустим, я использую этот метод для формы автозаполнения, можно ли использовать один и тот же токен несколько раз (конечно, сеанс устанавливается только один раз), потому что я устал от этого метода, но после первого предложения проверка не проходит (очевидно,изменено каким-то образом)

страница A

<?php
session_start();
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
?>
<input id="token" value="<?php echo $token; ?>" type="hidden"></input>
<input id="autocomplete" placeholder="Type something"></input>
....

Форма автоматически отправляется каждый раз, когда происходит изменение с помощью Jquery.

1 Ответ

3 голосов
/ 18 января 2011

Можно было бы использовать один и тот же токен несколько раз - до тех пор, пока $ _SESSION ['token'] остается неизменным.

Каждый раз, когда вызывается страница A - этот токен перезаписывается. Если вы хотите использовать тот же токен, вы можете попробовать:

<?php
session_start();
if( !isset($_SESSION['token']) ){
  $_SESSION['token'] = md5(uniqid(rand(), TRUE));
}
<input id="token" value="<?php echo $_SESSION['token']; ?>" type="hidden" />
....

Я бы также не использовал $ _REQUEST, поскольку это оставляет ваш источник неоднозначным - я бы использовал либо $ _POST, либо $ _GET.

...