【问题标题】:Asp.net WebApi2 - Avoid scraping, avoid direct acces via browser, only allow ajax calls from domainAsp.net Web Api 2 - 避免抓取,避免通过浏览器直接访问,只允许来自域的 ajax 调用
【发布时间】:2016-07-02 12:54:29
【问题描述】:

我是 webapi2 的新手,我实现了一个简单的 WebApi2 项目,该项目从第三方 web 服务(使用凭据调用)解锁一些数据

这很好用,但现在我正在寻找避免从我们的 webapi 抓取内容的方法。这不是敏感数据,但它可能对竞争对手有利。

我们不能让我们的用户登录,但我正在寻找方法让某人更难从网络服务中抓取内容。由于数据可以从我们的网站免费获得,我知道我们不能让它 100% 安全,但我必须做一些事情来让它变得更难(这似乎是人们以前反驳过的问题,我似乎无法找到一些明确的信息)

我研究过 CORS,但似乎更适合反过来,允许来自其他域的请求。

也许在后端使用一些密钥,用一些日期时间和标头信息对其进行哈希处理,然后让 javascript 将其添加到 ajax 调用中,如果令牌有效,则检查 webapi 方法?

编辑

因为似乎没有一种简单(且干净)的方法来阻止令牌身份验证滥用,所以我决定使用 Ip 限制。不理想,但有帮助:

我使用了这个库,它运行良好: https://github.com/stefanprodan/WebApiThrottle

【问题讨论】:

  • "这很好,但现在我正在寻找避免从我们的 webapi 中抓取内容的方法。这不是敏感数据,但它可能对竞争对手有利。"如果您的所有输出都是基于 HTML 的,则无法避免这种情况,一种方法是将某些数据呈现为图像格式,但您的竞争对手可以再次使用某种形式的 OCR 并绕过它。
  • 好吧,将数据呈现为图像格式会有点过分,并且会损害用户体验。我想阻止的是他们能够轻松地自动发送对 webapi 的请求。例如,通过 domain.tld 上的 ajax 使用以下请求: domain.tld/api/getcategoriesbyid 我想阻止(或者如果更实际的话,可能会更困难)用户/服务器自动调用它并存储数据,或在他们自己的应用程序中使用这些方法。
  • 老实说,如果 web api 向公众公开,我真的不知道您将如何实现这一目标。您的第三方提供与您的 Web api 集成不是吗?
  • 同意,使用另一种解决方案,请参阅我的编辑

标签: asp.net asp.net-web-api webapi2


【解决方案1】:

几个想法:

共享密钥。您提到了这一点,但我会让他们将密钥作为不记名令牌添加到授权标头。然后您的 API 可以简单地比较密钥以获得已知值并拒绝或接受请求。

混淆 ID。您可以使用 Guid 来防止这种情况,而不是使用易于自动化的 int。这将需要更新您的数据集以具有 Guid,因此它可能不可行。

用户代理解析。查看用户代理标头,如果它来自浏览器或您不允许的任何其他用户代理,请拒绝该请求。这很容易被欺骗,但检查起来很快。

请记住,通过默默无闻的安全性不是安全性。您提到您理解这不安全,但只是想让它变得更加困难,我认为这些方法中的任何一种都可以。 Bearer 令牌将是最安全的,因为您可以为每个客户端提供自己的密钥并跟踪使用情况。您可能会争辩说,如果您控制谁拥有密钥并保持密钥轮换,令牌路由实际上是安全的。我提到的其他两个选项无论如何都不安全,但他们会完成工作。

【讨论】:

  • “我们不能让我们的用户登录,但我正在寻找方法让某人更难从网络服务中抓取内容。因为数据可以从我们的网站免费获得”你确实明白了部分对吗?
  • 感谢您的回复,现在我正在使用另一种解决方案,请参阅我的编辑。也许我稍后会看看这个以实现其他一些功能。
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2012-01-10
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2011-08-01
相关资源
最近更新 更多