Здравствуйте! Есть две функции setToken и checkToken Если человек открывает страницу N то setFunction записывает в сессию токен и возвращает его значение для передачи в хтмл-форму Затем через форму делается аякс запрос к скрипту с функцией checkToken. Обе функции вызываются из общего тела скрипта в зависимости от переменных $_GET В итоге приходят разные переменные в сессии и в $_POST Код (PHP): session_start(); function setToken(){ $token = sha1(substr(str_shuffle('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'), 0, 10) . microtime()); $_SESSION['tokenCSRF'] = $token; return $token; } function checkToken(){ if($_SESSION['tokenCSRF'] == $_POST['tokenCSRF']){ echo 'true'; } } спасибо за внимание!
повторный вызов setToken() изменит значение в сессии. может быть в этом причина? более одного вызова перед проверкой. Добавлено спустя 7 минут 2 секунды: исходя из этих соображений, я бы сделал немного иначе: 1) чтобы повторные вызовы в пределах одной сессии генерировали бы одинаковые токены. Код (PHP): $token = sha1($secret.SID); // сколько не вызывай, будет одинаковый (для одной сессии, т.е. пользователя) или Код (PHP): $token = sha1($secret.SID.$_SERVER['REQUEST_TIME']); // одинаковый в пределах одного запроса 2) добавил бы параметр action чтобы в одной сессии могло быть несколько разных токенов для разных форм. Код (PHP): $_SESSION['tokenCSRF'.$action] = $token; и при проверке Код (PHP): if($_SESSION['tokenCSRF'.$action] == $_POST['tokenCSRF']){
Спасибо за ответ, насчёт повторной проверки - этот вариант сразу проверил 1 насчёт одного и того же токена на протяжении всей сессии - это конечно выход, но желательно получать уникальный токе при каждом формировании хтмл формы. 2 за этот пункт отдельное спасибо))) как раз нужны разные токены для разных форм