- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
A $_SESSION['token']
在每一页的开头生成。我已经知道使用 $_COOKIES
这是完全错误的,因为它们是针对每个请求自动发送的。
在每个<form>
, 以下输入: <input type="hidden" name="t" value="<?php echo '$_SESSION['token']; ?>">
已附加。
$_SESSION['token'];
使用 $_POST['t']
验证
现在我有几个小问题:
$_SESSION
变量,前一个(仍然打开的)页面变得无效,如何防止这种情况?非常感谢您。
最佳答案
Is this a good way to prevent CSRF?
是的。这样做是为了强制客户端在可以对您的表单处理程序执行 POST 之前在表单上执行 GET。这可以防止 CSRF 在现代浏览器中,因为浏览器会阻止客户端 Javascript 向外部域发出 XHR GET 请求,因此第 3 方无法在他们的网站上模仿您的表单并成功获得有效 token 提交。
When another page is opened as well that sets the same $_SESSION variable, the previous (still open) page becomes invalid, how to prevent this?
允许多个 token 同时有效,在 session 中保留一组有效 token 。或者,根本不存储任何 token ,而是使用 token 签名方案。我已经涉足并解释了 here .备选方案 2:在整个 session 中只使用一个 token ,而不会使 token 无效。 (在评论中向@SilverlightFox 致敬)
For forms this method is clear, but how to handle normal links? Is it necessary to append the token to each link as well?
没有。您只需要保护 POST 请求,因为大概只有 POST 请求可以更改敏感数据(眨眼轻推,您坚持 REST 约定,对吧?!)并且 XHR GET 请求已被浏览器阻止-边。
关于php - 如何在PHP中有效防止跨站请求伪造(CSRF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776062/
我有一个站点是在 asp.net 中完成的。另一个较新的站点是在 asp.net MVC、LINQ 和 Razor 中完成的。 当我访问旧站点 oldsite/default?userid=243 时
我想提供一段 Javascript 代码,它可以在包含它的任何网站上运行,但它总是需要在托管 Javascript 的服务器上获取更多数据(甚至修改数据)。我知道出于显而易见的原因存在安全限制。 考虑
我是一名优秀的程序员,十分优秀!