我应该如何确保出现在网站每个页面上的联系表格?

信息安全 应用安全 Web应用程序 蛮力 对策
2021-09-03 15:48:32

我的客户在他们网站的每个页面上都有一个小的“联系我们”表格。他们坚持不包括在这些表单上进行 CAPTCHA 验证,以使它们易于使用,但我觉得我有责任实施某种类型的安全措施以防止暴力攻击等。我在这里有什么选择,尤其是那些不涉及更改表单的 UI。

仅供参考,客户端将 ColdFusion 8 作为其服务器端脚本语言,目前用于将数据插入数据库。不过,该解决方案不必特定于 ColdFusion。我在这里寻找想法 - 不一定是代码片段。

4个回答

这是一篇关于 CATPCHA 的很好的总结文章:

http://www.smashingmagazine.com/2011/03/04/in-search-of-the-perfect-captcha/

我认为您不使用 CAPTCHA 是对的。研究表明,CAPTCHA 可以将您的转化率降低 3%,甚至可能高达 30%即使雇用某人手动过滤或使用机械土耳其人,yourmaninindia.com等可能更便宜,更好地为您的客户体验

良好的被动措施:

  • Roboo 脚本今年在 Blackhat 进行了演示,并为您提供了一些 DOS 保护。

  • 添加一个永远不应该完成的蜜罐隐藏字段。您可以使用 Javascript 在合法的表单提交中自动填写此内容并验证服务器端。

  • 速度度量,例如提交表单的速度。

所有这些都不是完美的,可能会给残疾人带来问题,并且会给您带来误报。如果您仍然收到不可接受的垃圾邮件或机器人使用量,请使用最流行和免费的选项 Re-Captcha。理想情况下,将其与上述被动步骤结合起来,仅在您怀疑机器人提交时才显示验证码(即不是每次都向用户显示的自适应方法)。是的,Re-Captcha 在研究实验室中使用 OCR 技术的成功率高达25%,但它仍然足以阻止拉网机器人寻找未受保护的目标(比从熊身边跑的人跑得更快)。此外,您正在帮助 Google 翻译世界书籍,直到 duolingo.com 提出下一个创新,这并不是一件坏事。

NoBot 是Microsoft的一个有趣的免费解决方案

描述

NoBot 是一种控件,它试图在不需要任何用户交互的情况下提供类似于 CAPTCHA 的机器人/垃圾邮件防护。这种方法比需要实际人工干预的实施更容易绕过,但 NoBot 的好处是完全不可见。NoBot 可能与博客/评论垃圾邮件存在问题且不需要 100% 有效性的低流量网站最相关。

NoBot 采用了几种不同的反机器人技术:强制客户端的浏览器执行可配置的 JavaScript 计算,并将结果作为回发的一部分进行验证。(例如:计算可能是一个简单的数字,或者也可能涉及 DOM 以增加对涉及浏览器的保证)在请求表单和可以回发表单之间实施可配置的延迟。(例如:人类不太可能在两秒内完成表格)对每单位时间每个 IP 地址的可接受请求数量实施可配置限制。(例如:一个人不可能在一分钟内提交相同的表格超过五次)

NoBot 可以通过违反上述任何技术进行测试:快速回发、多次回发或在浏览器中禁用 JavaScript。

我相信 OWASP 有一些反自动化的资源。

对于您的特定场景,我可能会建议在每个 HTML 链接中使用某种标记(例如联系表单的 HTML 表单提交标准)并在您的动态页面中编写代码以添加Referer 标头,以便您以后可以检查存在与前一个令牌匹配的 Referer 标头。

但是,这样做可能会产生很多问题。例如,可能会发生 HTTP 标头注入。你当然有每个动态页面都有的问题,例如注入缺陷、跨站脚本、路径泄漏——但你也添加了并发问题、异常处理问题等。

不要费心去寻找 CAPTCHA,这几乎一文不值。
而是实施合理的速率限制机制——即限制在给定时间内从单个 IP 地址到达的“联系我们”请求的数量,“数量”和“时间量”的合理值。例如,每分钟不超过 10 个联系请求,如果有意义的话 - 或者每小时 5 个,如果有意义的话。

当然你不能把它限制得太紧,因为 IP 地址不一定一对一映射到用户(DHCP、动态 IP,例如通过拨号、公司代理等),所以你需要留下一些那里有摆动的空间 - 但另一方面,每分钟 2000 个请求太多了。
您无法在每个会话中实施节流阀,因为这很容易重置。

还可以考虑以更高的速率为任何地址实施全局限制。这可能会导致某种形式的 DoS,但我再次假设联系表格的可用性并不重要......