0

作为思想实验的一部分,我试图确定服务器是否有任何希望只提供一条数据供浏览器环境接收和使用,即爬取我网站的机器人无法读取该数据。

显然,如果该信息是在源代码中发送的,或者实际上是通过任何常用的 HTTP 方式发送的,那么它可以被机器人获取 - 到目前为止,非常简单。

但是,如果信息是由服务器而不是作为 websocket 消息传输的呢:难道这不是只能由浏览器环境中的一些相应(并且可能经过身份验证的)JavaScript 接收,从而阻止它被机器人拦截吗?

(这是基于我的假设,即机器人没有客户端环境,本质上是一个恶意的服务器端脚本,通过类似 cURL 的方式调用站点,伪装成用户)。

表述这个问题的另一种方式可能是:对于 websockets 的 web 实现,消息的接收总是由客户端环境(即 JS)完成吗?

4

2 回答 2

1

使用 WebSocket 没有区别。您无法逃避以下事实:您始终可以编写一个外观和行为与任何标准浏览器完全相同的非浏览器客户端。

我可以伪造:您可能阅读的任何 HTTP 标头(例如浏览器供应商等)。标题origin也无济于事(我可以伪造它)。饼干也没有。我会阅读它们并还给它。

您可能会通过使用强大的验证码保护您的网站而侥幸逃脱,并且仅在验证码被解决后才设置 cookie。这取决于机器人无法解决的验证码..

于 2013-10-05T18:06:25.250 回答
1

我无法回答有关 websockets 的问题,但有足够积极性的攻击者会找到一种方法来模拟您需要的任何环境。通过 ajax 加载此内容,您可以消除休闲机器人。您可以使用 robots.txt 消除行为良好的机器人。

于 2013-10-05T11:08:29.473 回答