Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是否足以保护CSRF?_Php_Csrf - Fatal编程技术网

Php 这是否足以保护CSRF?

Php 这是否足以保护CSRF?,php,csrf,Php,Csrf,这对于CSRF保护是否足够: 生成一个随机字符串,$\u会话['hash']将其存储 表单中的隐藏值(在$\u POST['thing']中)包含随机字符串 提交表单时,它会检查$\u SESSION['hash']是否等于$\u POST['thing'],如果匹配则继续 我的一个网站用户一直告诉我我的网站很脆弱,但我不知道他是否只是在欺骗我。还有什么我可以做的吗?来自: 您可以额外减少cookie的使用寿命 检查HTTP引用器头 还有验证码,但不是每个用户都喜欢 但是,使用密钥的ac

这对于CSRF保护是否足够:

  • 生成一个随机字符串,
    $\u会话['hash']
    将其存储
  • 表单中的隐藏值(在
    $\u POST['thing']
    中)包含随机字符串
  • 提交表单时,它会检查
    $\u SESSION['hash']
    是否等于
    $\u POST['thing']
    ,如果匹配则继续
我的一个网站用户一直告诉我我的网站很脆弱,但我不知道他是否只是在欺骗我。还有什么我可以做的吗?

来自:

  • 您可以额外减少cookie的使用寿命
  • 检查HTTP引用器头
  • 还有验证码,但不是每个用户都喜欢

但是,使用密钥的acion仍然比不使用密钥要好…

如果它对每个用户都是唯一的,那么就足够了。即使用户会话的持续时间是相同的,它仍然可以,但我建议定期重新生成它。 此外,您可能希望每个表单使用不同的令牌。例如,如果您有登录表单和注释表单,最好使用不同的令牌,但这不是100%必需的

为什么你认为仅仅因为有人说你的网站有漏洞,它就与CSRF连接有关?它们是许多其他可能的漏洞

可能您的web服务器过时且易受攻击,可能php版本不是最新版本。也许用户能够通过ssh或telnet登录到您的服务器。也许用户能够猜出管理员密码

也许可以让人们通过cookie登录,并在cookie中存储登录凭据


除了CSRF之外,还有太多的东西可以利用。还有一种可能是用户错了,或者不知道他在说什么,或者他只是想让你紧张。

我认为你缺少的是将代币限制在一个很小的时间窗口内。

你应该看看。快速总结:

  • CSRF攻击必须包含有效的令牌(反CSRF令牌),以便完全模拟表单提交
  • 令牌的有效性也可以限制在一个小的时间窗口内,例如五分钟
  • 如果您像我建议的那样在所有表单中使用令牌,那么您可以从关注点列表中删除CSRF。虽然不能将任何安全措施视为绝对安全措施(攻击者理论上可以猜测有效令牌),但这种方法可以降低大部分风险。在下个月之前,注意安全

每次加载页面时,如果尚未设置页面,则页面会发生更改


这就是你的问题。一旦检索到令牌,所有操作都可以很容易地再执行一次。我通常将令牌实现为对单个请求有效,然后重新生成它。

这可能取决于您更改随机字符串的频率;每个用户都必须拥有自己的页面,我建议定期轮换页面,这样意外披露就不会造成太大损害。每次他们加载页面时,如果页面尚未设置,页面就会发生变化。虽然这是一个很好的建议,但我要指出,您可能希望尝试将其与最终用户体验相协调。i、 e.如果代币经常过期,当他们阅读您的网页并开始执行某项操作时,代币可能已经过期,如果处理不当,可能会非常令人沮丧。我也可能不会使用该代币,但如果我愿意使用的话。我会尽快把它放好的!