Уникальный токен формы отключает многозадачность для пользователя
Если я хочу защитить свой сайт и пользователей от атак межсайтовой фальсификации (CSRF), я могу сгенерировать уникальный токен$token = md5( time() * rand );
накаждая страница это имеет форму. Токен находится в скрытом поле вводаecho '<input type="hidden" name="token" value="'.$token.'">';
и в то же время хранится в переменной сеанса$_SESSION['token'] = $token;
.
Я проверю, есть ли на любой отправленной формеif($_POST['token'] == $_SESSION['token'])
и действуйте соответственно.
Однако некоторые пользователи могут работать в многозадачном режиме. Это то, чем я сейчас занимаюсь, пока я публикую это.
При написании своего поста я открываю различные окна / вкладки, чтобы, возможно, изучить информацию или посмотреть на некоторые другие вопросы о переполнении стека. Переполнение стека позволяет без проблем отправить форму.
Но если бы я делал это на своем сайте, делая это - то есть просматривал другие страницы, все еще составляя пост / форму - мой$token
будет обновляться каждый раз, когда я открываю другую страницу с моего сайта. Создание скрытогоinput
токен в форме, над которой я работаю и в конечном итоге хочу отправитьнекорректныйпотому что это не будет соответствовать$_SESSION['token']
Переменная больше, которая была восстановлена, когда я посетил другую страницу ...
Любые хорошие идеи, как предотвратить эту проблему, или какие-либо лучшие решения, чтобы остановить CSRF в первую очередь?
Я хочу разрешить своим пользователям многозадачность И хочу быть защищенным от CSRF ...