Как эффективно предотвратить подделку межсайтовых запросов (CSRF) в PHP
Я пытаюсь предотвратить CSRF в PHP следующим образом:
A $_SESSION['token']
генерируется в начале каждой страницы. Я уже знаю, что с помощью$_COOKIES
совершенно неверно, так как они отправляются автоматически для каждого запроса.
В каждом<form>
, следующий вход:<input type="hidden" name="t" value="<?php echo '$_SESSION['token']; ?>">
добавлен.
The$_SESSION['token'];
проверяется с помощью$_POST['t']
Теперь у меня есть несколько небольших вопросов:
Это хороший способ предотвратить CSRF? Если нет, пожалуйста, объясните. Когда открывается другая страница, которая задает то же самое$_SESSION
переменная, предыдущая (все еще открытая) страница становится недействительной, как это предотвратить? Для форм этот метод понятен, но как обращаться с обычными ссылками? Нужно ли добавлять токен к каждой ссылке?Заранее большое спасибо