我正在用PHP构建网站。对于每个form
标记,我添加token
字段以防止CSRF攻击。
在每个页面中,我创建一个随机字符串并将其存储在会话中。
$_SESSION['form1_token'] = hash('sha512', uniqid(null, true));
HTML:
<form ...>
<input type="hidden" value="<?php echo $_SESSION['form1_token']; ?>" />
....
</form>
然后我检查服务器端的值并从会话中删除令牌。
它工作正常,但如果用户导航到另一个页面而不发送表单,我该怎么办?永远不会删除令牌。
时间限制并不好,因为我的网页应该运行很长时间,并且需要刷新可能会很烦人。
所以我考虑在unload
事件中发送请求以删除会话。但是具有一点网络知识的用户可以在每个浏览器中删除该事件。
如何正确管理令牌?
答案 0 :(得分:0)
使用时间限制。把它设置成长的东西(比如一天)。如果页面设计为在那里停留的时间超过该页面,则将计时器上的Ajax请求发送到脚本,该脚本可延长数据库中令牌的生命周期。