Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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_Security_Csrf_Spam - Fatal编程技术网

Php 防止CSRF和防止垃圾邮件发送者

Php 防止CSRF和防止垃圾邮件发送者,php,security,csrf,spam,Php,Security,Csrf,Spam,编辑:看来我对CSRF到底是什么有点困惑。我把问题改写了 -- 所以我知道有很多关于预防CSRF的帖子,但是有很多方法可以绕过常见的方法: CSRF令牌-在表单上设置CSRF令牌,分配具有相同数据的cookie,并在服务器端进行匹配 检查useragent-确保所有请求都具有有效useragent的简单方法。很容易绕过,但还是一个简单的检查 基于IP的限制基于请求者的IP地址限制请求 -- 但这一切都可以轻易绕过!还可以做些什么来防止这种事情?请不要验证码 让我们假设一个URL缩短器的示例站点

编辑:看来我对CSRF到底是什么有点困惑。我把问题改写了

--

所以我知道有很多关于预防CSRF的帖子,但是有很多方法可以绕过常见的方法:

CSRF令牌-在表单上设置CSRF令牌,分配具有相同数据的cookie,并在服务器端进行匹配

检查useragent-确保所有请求都具有有效useragent的简单方法。很容易绕过,但还是一个简单的检查

基于IP的限制基于请求者的IP地址限制请求

--

但这一切都可以轻易绕过!还可以做些什么来防止这种事情?请不要验证码

让我们假设一个URL缩短器的示例站点

  • 用户提交请求->返回缩短的URL
  • 脚本检查有效的引用(来自原始表单)——很容易被欺骗
  • 基于IP地址的检查--代理可以轻松绕过此问题
  • 检查CSRF令牌——垃圾邮件发送者可以通过首先访问原始站点并在对站点的请求中使用设置的cookie+令牌轻松绕过此问题
  • 我只是不知道还能做些什么?即使在JavaScript方面,可以做些什么来防止这种情况?为cookie分配一个超时可能会起作用,但垃圾邮件发送者只会通过访问原始页面在自身上重新分配cookie

    如果请求率高于平均水平,则可以向垃圾邮件发送者显示验证码。但我也想要一些不会标记有效用户的东西。是的,强迫用户注册帐户可以解决这个问题,但不可行


    谢谢

    时间。它过去了。需要存储CSRF。某处。随着时间的推移,这家商店的日期也随之结束。如果你只留下一个特定的时间跨度,你保持秘密,把时间变成其他秘密,没有垃圾邮件发送者可以“更新”到当前

    米森完成了。如何传递数据—当然是在HTTP消息中的某个位置,通常是在多个位置,例如标头和正文—完全由您选择

    请注意,您只允许在某些时间范围内执行操作

    如果您需要更高的安全性,则需要用户身份验证(可以使用凭据登录,也可以使用UA规范(包括IP和请求头)自动登录)。然后在该会话中,您可以在服务器端保留许多攻击者无法预测的秘密

    例如,保持表单名称和值完全动态。在提交输入值之前,使用javascript旋转输入值,仅接受旋转后的值。根据时间更改旋转。允许您的秘密的公开部分共享一个当前时间以计算旋转。如前所述,根据您的需要


    在这种情况下,HTTP的无状态特性看起来可能是一个弱点。但事实并非如此。使用它。

    时间。它过去了。需要存储CSRF。某处。随着时间的推移,这家商店的日期也随之结束。如果你只留下一个特定的时间跨度,你保持秘密,把时间变成其他秘密,没有垃圾邮件发送者可以“更新”到当前

    米森完成了。如何传递数据—当然是在HTTP消息中的某个位置,通常是在多个位置,例如标头和正文—完全由您选择

    请注意,您只允许在某些时间范围内执行操作

    如果您需要更高的安全性,则需要用户身份验证(可以使用凭据登录,也可以使用UA规范(包括IP和请求头)自动登录)。然后在该会话中,您可以在服务器端保留许多攻击者无法预测的秘密

    例如,保持表单名称和值完全动态。在提交输入值之前,使用javascript旋转输入值,仅接受旋转后的值。根据时间更改旋转。允许您的秘密的公开部分共享一个当前时间以计算旋转。如前所述,根据您的需要


    在这种情况下,HTTP的无状态特性看起来可能是一个弱点。但事实并非如此。使用它。

    您可以为输入字段生成随机名称,然后让脚本识别所有字段。这与Facebook的做法类似,非常有效。

    您可以为输入字段生成随机名称,然后让脚本识别所有字段。这与Facebook所做的类似,它工作得很好。

    您似乎在这里混合了您的目标。您是要阻止跨站点请求伪造,还是正在尝试阻止机器人程序?这是两个不同的东西,只有少量的重叠。都是!垃圾邮件发送者从远程服务器(CSRF)发送请求。我将把这个问题改写一下。谢谢。我想你可能有点混淆了你的术语。CSRF是一种利用漏洞的攻击,恶意用户通过它诱使合法用户发出非法请求。听起来你真正感兴趣的只是防止机器人和非法用户。那不是CSRF,那只是机器人保护。我明白了。谢谢你的澄清。我刚刚使用了CSRF的缩写“跨站点请求伪造”->从远程服务器发送的请求,而不是原始站点。您可能会想查看有关该主题的wikipedia文章。给出的例子将有助于进一步澄清:您似乎在这里混合您的目标。您是要阻止跨站点请求伪造,还是正在尝试阻止机器人程序?这是两个不同的东西,只有少量的重叠。都是!垃圾邮件发送者从远程服务器(CSRF)发送请求。我将把这个问题改写一下。谢谢。我想你可能有点混淆了你的术语。CSRF是一种利用漏洞的攻击,恶意用户通过它诱使合法用户发出非法请求。听起来你真正感兴趣的只是防止机器人和非法用户。那不是CSRF,那只是机器人保护