我有一个 Web 应用程序,其中包含一些非常直观的 URL,因此人们编写了一些 Chrome 扩展程序,使用这些 URL 向我们的服务器发出请求。不幸的是,这些扩展给我们带来了问题,锤击我们的服务器,发出格式错误的请求等,所以我们试图弄清楚如何阻止它们,或者至少难以向我们的服务器发送请求以阻止这些扩展被使用(我们提供了他们应该使用的 API)。
我们尝试在请求中添加一些自定义标头,在响应中添加 junk-json-preamble,但扩展作者已经更新了他们的代码以匹配。
我不熟悉 chrome 扩展,那么他们对主机页面有什么样的访问权限?他们可以在主机页面上调用 JavaScript 函数吗?浏览器是否包含一个特殊的标头来区分主机页面请求和扩展请求?主机页面可以检查扩展列表并拒绝某些扩展吗?
我们考虑过的一些选项是:
- 用户限制 QPS 的速率,但问题不在于所有查询都是平等的,并且扩展通常会启动几个看起来像用户输入查询的昂贵查询。
- 限制用户可以使用的服务器时间,但问题是用户可能会通过多次浏览或运行昂贵的查询来达到此限制。
- 添加静态自定义标题/响应文本,但他们更新了代码以模仿我们的代码。
- 找出某种令牌(可能以某种方式加密),我们在请求中包含扩展无法轻易猜到的令牌。我们缩小/混淆了我们的 JS,因此可以将它嵌入到 JS 源代码中(因为它的变量名很难猜到)。
我意识到这可能不是一个 100% 可解决的问题,但我们希望要么让我们在对抗它方面占上风,要么让我们的 UI 变得足够困难,以至于更少的人这样做。