如何定义 cURL 请求并阻止它?不可能?

How define cURL request and block that? That's impossible?

提问人:QuestionMan 提问时间:9/21/2023 更新时间:9/21/2023 访问量:66

问:

一个站点具有相同的领域,我的站点阻止了 cURL 请求。我读到服务器无法定义真正的浏览器和 cURL。这不可能。我想重复他们对我自己网站的机器人和 cURL 请求的辩护。

但这不仅仅是愚蠢的检查用户代理。它们需要像真实浏览器一样的完整复制标头,否则您会收到以下消息:

如果您不是机器人,请复制报告并将其发送到我们的 支持团队

这还不是结束,因为如果你复制完整浏览器的 cURL 请求标头,你会得到生成 cookie 的空页面(据我所知,这是 JWT 或类似的东西)。 我检查了浏览器的行为:浏览器有该cookie,但如果这是您与他们网站的第一次连接,则其服务器将返回到带有该JWT的标题和正常网页中。set-cookie

我注意到以太网说 - 定义 cURL 请求是不可能的,但无论如何他们都可以做到,我不知道怎么做。这真的很有趣。 我想他们是怎么做到的。我比较了 cURL 和真实浏览器的响应标头(用于第一次联系):

真实浏览器的标头响应:

HTTP/1.1 200 
Server: nginx
Date: Tue, 19 Sep 2023 15:42:12 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15
set-cookie: spid=some_spid_value; Path=/; Secure; SameSite=None
set-cookie: spsc=some_spsc_value; Path=/; Secure; SameSite=None
vary: Accept-Encoding
content-encoding: gzip
strict-transport-security: max-age=15724800; includeSubDomains
X-SP-CRID: 1909462187:1

cURL 的标头响应(像真实浏览器一样复制请求标头):

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 19 Sep 2023 15:43:28 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=15
access-control-allow-origin: *
cache-control: no-cache
expires: Tue, 19 Sep 2023 15:4327 GMT
pragma: no-cache
content-type: text/html
X-SP-CRID: 1913083470:1

如果比较这个标头,你可以看到除了 之外,服务器还为 cURL 和浏览器发送了一些其他标头。cURL 的额外标头:、、、.浏览器的额外标头:、、.这就是关于定义 cURL 请求。我用 Postman 重复了我的实验,我使用了与真实浏览器相同的标题。我得到了与cURL相同的结果。set-cookieaccess-control-allow-originexpirescache-controlpragmavarycontent-encodingstrict-transport-security

我不知道他们是怎么做到的,但我认为他们看到了请求的某些签名(可能是 SSL 或其他元数据),然后定义它是否是 cURL。

php 安全 curl http-headers

评论

0赞 Barmar 9/21/2023
我们无法回答各个站点如何进行验证检查。这可能是与时间相关的启发式方法。
0赞 Markus Zeller 9/21/2023
If you are not a bot, please copy the report and send it to our support team.你为什么不问他们?
0赞 QuestionMan 9/21/2023
@MarkusZeller我不是他们的朋友。我怀疑他们帮助了我。

答: 暂无答案