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
Security 停止机器人攻击服务器端解决方案(无验证码或JavaScript)_Security - Fatal编程技术网

Security 停止机器人攻击服务器端解决方案(无验证码或JavaScript)

Security 停止机器人攻击服务器端解决方案(无验证码或JavaScript),security,Security,我继承了一些最近被多次远程表单提交攻击的代码 最初,我通过设置唯一的会话身份验证令牌(而不是会话id)实现了一些保护。虽然我意识到这个特定的攻击不是CSRF,但我根据这些帖子(尽管已经过时)修改了我的解决方案 我也读过关于SO的现有帖子,比如 但是,攻击者现在首先请求表单页,启动有效会话,然后在下面的POST请求中传递会话cookie。因此具有有效的会话令牌。所以我失败了 我需要采取一些额外的预防措施。如果可能的话,我希望避免使用CAPTCHA(不利于用户体验)和JavaScript解

我继承了一些最近被多次远程表单提交攻击的代码

最初,我通过设置唯一的会话身份验证令牌(而不是会话id)实现了一些保护。虽然我意识到这个特定的攻击不是CSRF,但我根据这些帖子(尽管已经过时)修改了我的解决方案

我也读过关于SO的现有帖子,比如

但是,攻击者现在首先请求表单页,启动有效会话,然后在下面的POST请求中传递会话cookie。因此具有有效的会话令牌。所以我失败了

我需要采取一些额外的预防措施。如果可能的话,我希望避免使用CAPTCHA(不利于用户体验)和JavaScript解决方案。我还考虑了推荐人检查(可以伪造)、蜜罐(隐藏字段)以及速率限制(可以通过节流来克服)。此攻击者是持久性的


话虽如此,还有什么更可靠的解决方案。

隐藏表单字段如何?如果它被机器人自动填充,您接受请求,但拒绝它。

验证码就是为了这个原因而发明的。因为没有办法100%区分人类和机器人


<>你可以通过增加服务器端计数器来节制你的用户,当它达到X次时,你可以把它看作是一个BOT攻击,然后锁定网站。然后,当一段时间过去时(也可以节省攻击时间),允许进入。

我自己也考虑过这一点

我想扩展sessionauth令牌来存储一组随机形式变量名。所以不是

<input name="title" ... >

你会得到

<input name="aZ5KlMsle2" ... >

然后另外添加一组陷阱字段,这些字段通过css隐藏


如果任何陷阱被填满,那么它不是一个普通用户,而是一个正在检查html源的bot…

如果你有一个人专门攻击你的页面,那么你需要找出这个攻击者与普通用户的不同之处

如果他用某些URL或文本或类似内容向你发送垃圾邮件,请在提交后阻止它们

你也可以隔离提交-不要让他们离开5分钟。在这5分钟内,如果您收到来自同一IP的同一表单的另一个提交-放弃两个帖子并阻止该IP

如果您使用好的验证码,那么验证码是好的,因为许多定制的自制验证码现在可以通过特制的软件自动识别



总而言之,你的问题不仅需要技术上的解决,还需要更多的社会解决方案,目的是中和僵尸主机,而不是阻止僵尸发布

这个攻击者比那个更老练。我觉得他们会在分析页面后简单地更新攻击。所以机器人管理员会告诉他们忽略隐藏字段。。。请记住,机器人不会像您那样查看页面,而是扫描源代码。如果机器人主机进入站点,甚至发现一个文本输入,显示为:无,他可以指示机器人不要填充它。。。每个会话都会更改随机post变量名。这使得很难简单地硬编码哪些字段要使用,哪些字段要避免。难道机器人不能简单地读取css而不填写隐藏的字段吗?是的,但是机器人主人可以分析css文件并查看哪些字段不需要填写。我不是建议你做一些明显的事情,比如设置字段本身的样式。。。我想你可以浮动一个div来覆盖某些字段。你检查过用户填写表单的时间了吗?我会在会话中存储一个时间,然后在填写表单后进行比较。如果少于n秒(可能2秒左右)或超过y秒(可能3600秒),则强制其重新填充表单。这是用户多次填写表单的用例吗?@Kevin,是的,它们是紧密提交的(~5秒)。我想增加这张支票。然而,正如我在问题中提到的,攻击者可以简单地限制他们的请求,比如说每35秒一次。你是否也检查了他们是否使用开放代理或可能是Tor exit nodes?@Kevin,对此并不熟悉。请详细说明,我知道。如果验证码是唯一的选择,那就这样吧。但我想相信,还有其他方法可以让攻击者更难对付,而不是我的用户。我的答案应该能够帮助你阻止至少大部分攻击,前3-4个机器人会通过,但至少不会超过20或100个。至少可以回答这个问题。任何附加建议都将不胜感激。@Jason附加建议需要了解详细信息,即执行的攻击类型、发布的攻击内容、攻击是来自一个主机还是来自世界各地,或者……,攻击的目的是什么等。也就是说,您能说的详细信息越多,您得到的答案就越有意义。如果发布涉及人工操作员(例如在印度或中国雇佣,他们每1000个验证码可获得1美元),验证码就不是一个选项。攻击相对简单。bot请求表单页面(GET+启动会话),将其值注入表单并提交请求(POST+传递会话cookie)。攻击似乎每隔几秒钟运行约10分钟,然后暂停并从另一个IP重新开始。据我所知,他们正在测试信用卡号码。@Jason主要问题是他们攻击的目的是什么。您的表单是某种商品或服务的订购表单吗?这是一种常见的黑客行为。有人通过病毒收集了大量的信用卡,想知道哪些已经被取消,哪些仍然有效。他们找到的表格可以让他们廉价地测试,以避免在信用卡账户中添加任何额外的危险信号。那些被他们确认工作的人,他们出售或收取高额费用,其余的人则被扔进垃圾桶。如果你有一张表格告诉我们