防止使用 PHP CURL 的远程脚本登录网站

Posted

技术标签:

【中文标题】防止使用 PHP CURL 的远程脚本登录网站【英文标题】:Prevent remote script using PHP CURL from logging into website 【发布时间】:2011-06-25 22:45:57 【问题描述】:

有哪些方法可以用来防止登录页面被远程 php 脚本使用 CURL 登录?检查引用者和用户代理将不起作用,因为可以使用 CURL 设置它们。理想的解决方案是在不使用 CAPTCHA 的情况下解决这个问题,这就是这个问题的重点,试图弄清楚这是否可能。

【问题讨论】:

您为什么要禁止 cURL 访问?如果有这么大的交易,请添加 reCAPTCHA。 【参考方案1】:

没有任何方法可以简单地阻止它。如果脚本知道用户名和密码,他们将能够登录。

您可以使用验证码,以便自动登录无法读取它,但这也会对实际用户造成负担。

如果您担心它被用于尝试暴力登录,那么您可能需要在多次尝试后提供一些额外信息。

停用帐户并要求通过电子邮件重新激活 在多次尝试失败后需要验证码

【讨论】:

好答案。您还可以在登录页面上使用 javascript 并使用一些令牌等来验证 cURL 很难使用,但最终您不能阻止 cURL,因为它就像 Web 浏览器一样工作。请注意,要求 JavaScript 才能使用您的网站通常是一种罪过。 我们可以废弃页面中包含 javascript 的 curl 网站吗?如何绕过它?【参考方案2】:

如果我理解正确:

您有执行登录脚本的登录页面 登录脚本被远程 cURL 脚本入侵...

解决方案 在登录页面中放置带有唯一密码的隐藏元素,这只能发生一次,将此密码保存在会话中,在登录脚本中在会话中查找此代码,与发布到脚本的内容进行比较,应该继续进行,清除会话。 ..

关于主题的更多信息:http://en.wikipedia.org/wiki/Cross-site_request_forgery

【讨论】:

您将无法使用会话阻止 cURL。它只需要一个稍微复杂的脚本来接受和发送 cookie。【参考方案3】:

一种方法是在您的登录表单中包含一些 JavaScript,并使其无法成功提交,除非该 JavaScript 已运行。这使您的登录表单仅可用于打开 JavaScript 的人,而 CURL 没有。如果必要的 JavaScript 是某种每次都不同的挑战/响应(例如使用 http://www.ohdave.com/rsa/ 之类的东西使其变得不平凡),那么表单中正确设置的值的存在就是 JavaScript 运行的很好的证据。

虽然您无法停止所有自动脚本,但编写驱动实际浏览器引擎的脚本很容易,并且它们将通过此测试。

【讨论】:

【参考方案4】:

cURL 与任何其他客户端(例如浏览器)没有什么不同。您可以在隐藏的输入字段中使用与会话绑定的随机数来防止直接发出 POST 请求,但仍有一些方法可以解决这个问题。如果您担心的话,最好限制每分钟的登录尝试次数,以使暴力攻击更加困难。

【讨论】:

以上是关于防止使用 PHP CURL 的远程脚本登录网站的主要内容,如果未能解决你的问题,请参考以下文章

如何防止使用php自动多次点击网站?

如何判断网络爬虫还是浏览器访问网站,如何防止?php

PHP 使用curl 执行远程服务器的一个shell脚本

在 Play 框架中防止多次登录网站

防止PHP脚本被淹没

PHP 防止远程表单提交