【问题标题】:How can I tell a curl request vs browser request我如何分辨 curl 请求与浏览器请求
【发布时间】:2014-10-25 11:25:17
【问题描述】:

我有一个网络服务器,并且某些用户一直在使用自动脚本检索我的图像。我希望将他们重定向到错误页面或仅在 CURL 请求时给他们无效图像。

我的图像位于http://example.com/images/AIDd232320233.png,是否可以通过 .htaccess 将其路由到我的控制器索引函数,以检查它是否是真实请求?

还有我的另一个问题,我如何检查浏览器标头以区分最有可能真实的标头和使用 cURL 请求完成的标头?

【问题讨论】:

  • 所以除了你的非 CURL 请求。这些是否以某种方式进行了身份验证?
  • 如果你设置了所有正确的标题,你可以用 curl 完全欺骗任何浏览器。那么就无法区分了。
  • 一般你不能。人们试图下载内容的预期懒惰是什么? (从使用库存样本到匹配所有已知浏览器的完全自定义查询)?
  • @alexeilvenkov 你能给我一个真实的标题示例
  • 不确定它是否完全重复,但您应该在这里查看:stackoverflow.com/questions/395034/…

标签: php .htaccess curl


【解决方案1】:

很遗憾,简短的回答是“不”。

cURL 提供了“欺骗”任何浏览器的所有必要选项。也就是说,更具体地说,浏览器通过特定的标头信息来识别自己,而 cURL 提供了所有工具来以您选择的任何方式设置标头数据。所以,直接区分两个请求是不可能的。*

*没有更多信息。确定是否有真人发起流量的常用方法是在前面的步骤中设置 cookie(尝试确保请求是用户在您的网站上的自然副产品),或使用验证码和 cookie(验证某人可以通过测试)。

最简单的方法是设置一个 cookie,它只会确保糟糕的程序员不会通过,或者不想花时间为您的网站定制抓取工具的程序员。

验证码是比较可靠的方法,因为它要求用户进行交互以证明他们的血管中有血液。

如果图片不是“下载”,而是更大整体的一部分(例如,只是您网站上的一张图片),则可以使用 Captcha 来验证用户,然后再授予他们访问网站的权限所有的。或者,如果是下载,则会在解锁下载之前呈现。

不幸的是,验证码对于设置和最终用户来说都是“痛苦的”。它们对于通用访问没有多大意义,它们有点过火了。

对于通用的东西,您实际上只能限制 IP、下载限制等。即使在那里,如果请求被分发,您也无能为力。他们是休息时间,真的......

【讨论】:

猜你喜欢
  • 2016-01-11
  • 2023-03-10
  • 2020-09-16
  • 1970-01-01
  • 2012-04-14
  • 2013-03-19
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多