【发布时间】:2016-02-19 22:52:04
【问题描述】:
$_SESSION['token']在每个页面的开头生成。我已经知道使用$_COOKIES是完全错误的,因为它们是针对每个请求自动发送的。在每个
<form>中,附加以下输入:<input type="hidden" name="t" value="<?php echo '$_SESSION['token']; ?>">。$_SESSION['token'];已通过$_POST['t']进行验证
现在我有几个小问题:
- 这是防止 CSRF 的好方法吗?如果不是,请解释。
- 当打开另一个设置相同
$_SESSION变量的页面时,前一个(仍然打开的)页面会失效,如何防止这种情况发生? - 对于表单,这个方法是明确的,但是如何处理正常的链接呢?是否也需要将令牌附加到每个链接?
非常感谢您。
【问题讨论】:
-
有一些方法可以进一步强化这一点(例如,将令牌绑定到单个表单,这样它们就不能在不同的上下文中重复使用,这就是我们的 anti-csrf 库所做的)。但你所描述的是大多数人都会做的事情。
-
感谢@ScottArciszewski 提供的链接和建议,我希望自己掌控一切,而不是依赖第三方库,但进一步限制它是一个非常好的主意.
标签: php php security session session-variables csrf