Используя это:
function nonce($str,$expires){
return sha1(date('Y-m-d H:i',ceil(time()/$expires)*$expires).$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$salt.$str);
}
Допустим, я инициализирую свой session_id после входа в систему, также генерируя отпечаток, как это:
session_regenerate_id();
$_SESSION['thumbprint']=nonce(session_id().'thumbprint',86400);
И назовите это:
function valid_session(){
return ($_SESSION['thumbprint']==nonce(session_id().'thumbprint',86400));
}
function logged_in(){
return (valid_session()&&isset($_SESSION['user']['id'])&&isset($_SESSION['user']['typeid'])&&isset($_SESSION['user']['email']));
}
Вверху каждой страницы:
if(logged_in==false){//logout & redirect back to index}
Имея отпечаток большого пальца под таким контролем, мне даже нужно делать токены для каждого вызова функции, или этого влияния достаточно для защиты от CSRF?
::: 86400 - это 24 часа, которые я понимаю, это долго. Это слишком долго, чтобы реально использовать уникальный идентификатор для?
::: Когда я говорю «безопасные функции», я имею в виду, что функции могут быть защищены с использованием того же одноразового номера или токена.