我是一个用 PHP 编写登录脚本的初学者。这是我到目前为止所拥有的表单令牌声明:
$_SESSION["form_token"] = md5(rand(time (), true)) ;
该语句是在用户表示他/她想要登录后立即发出的。
我有限的理解是,令牌的目的是在唯一的时间点识别唯一的用户并伪装表单令牌信息。
然后一切都变得模糊。这是我的 3 个悬而未决的问题:
出于安全目的“检查”表单令牌的最佳时间是什么时候?
我该如何检查?
如果有的话,我什么时候“销毁”表单令牌? (IOW,表单令牌会保持“活动”状态直到用户注销吗?
这是为了防止 CSRF 攻击
http://en.wikipedia.org/wiki/Cross-site_request_forgery http://en.wikipedia.org/wiki/Cross-site_request_forgery
理论上,恶意站点可以显示发布到您的应用程序的表单。该表单可能包含导致数据泄露或某些不需要的操作的说明。用户可能会被欺骗提交应用程序会接受的表单,因为用户已经登录。表单令牌可确保表单是由您的网站而不是其他网站创建的。
检查 HTTP_REFERER 通常足够好,但不是完整的解决方案(例如 https 不会发送引用字符串)。
如果您确实想使用令牌保护所有表单,您可以创建一些方便的函数,例如emitToken()和checkToken(),这将使其在站点范围内工作。
一些例子:
http://phpsec.org/projects/guide/2.html http://phpsec.org/projects/guide/2.html
http://www.rodsdot.com/php/CSRF_Form_Protection.php http://www.rodsdot.com/php/CSRF_Form_Protection.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)