【问题标题】:How to prevent API request source spoofing?如何防止 API 请求源欺骗?
【发布时间】:2015-10-16 13:21:34
【问题描述】:

背景

我正在使用 OAUTH 等编写自己的 API。

我希望用户能够获得 x 个免费请求,然后他们必须支付少量费用,因为服务器不是免费的。有没有办法防止坏人窃取令牌(例如在一个 android 应用程序的代码中)并生成他们自己的请求,精疲力竭 我的原始用户的请求? 问题的一个重要部分是:我能否确保请求是从某个平台发出的:例如,它是由安卓手机发出的吗? 因为每个平台会有不同的价格。

我自己的想法

  • 标题可以伪造,这只会造成虚假的安全感
  • 是否有最流行的平台类型(iOS、android、WP、 CMS、桌面应用程序)是一种安全的方式来存储凭据,同时 发展? (我是否错过了一些人们喜欢使用但不安全的平台?)
  • 如果是这样,我是否可以编写库来强制开发人员以安全的方式存储他的令牌,而不是硬编码它们?
  • 基于 IP 不适用于移动应用程序,但 您可以限制每个 IP 接受的请求

如果答案是否定的:

可能的后果

目前是什么阻止了我

  1. 下载使用 google maps api 的应用程序和 反编译。
  2. 提取令牌
  3. 生成大量请求只是为了惹恼开发人员 (curl)

人们将获得 wordpress 的许可证,但通过欺骗也会将他们的凭据用于移动应用程序。

免责声明:我没有恶意,但我尝试了解如何防止有恶意的人

【问题讨论】:

    标签: api rest security oauth


    【解决方案1】:

    基本上答案是否。你需要将你的代币广泛分布到你对零控制的环境中,所以你已经自动迷路了。没有一种普遍“安全”的方式来存储任何你可以强迫每个人使用的东西(如果有的话不是很好吗?)。

    为了跟踪使用情况,您需要对用户进行身份验证,您需要使用令牌进行身份验证,并且您需要避免被盗/泄露/滥用。这通常是您首先拥有令牌而不是密码的原因:因为您可以撤销和重新生成令牌。如果令牌被滥用,谁受到的伤害最大?此令牌所属的开发者。所以他们有很大的动力尽可能安全地存储这些代币;留给他们找出最好的方法。如果他们的代币表现出异常行为,您可以主动通知开发人员,并让他们可以轻松地自行撤销和重新生成代币。

    【讨论】:

    • 我同意你所说的大部分内容:但我添加了一个例子,其中受伤害最大的不是开发人员,而是我。如果我有不同的 api 使用许可证并且他滥用许可证 1 免费获得许可证 2(将其用于另一个平台,就像他支付的费用一样)。对于其余的智能解决方案,仍然 +1。
    • 老实说,这是一种 IMO 根本无法实现的商业模式。您会根据发出请求的客户类型收取不同的费用,即使请求本身基本上无法区分,并且在技术上无法识别发出请求的客户类型时也是如此。
    • 这正是问题所在。商业模式基于 Windows 有专业版和家庭版的相同概念:您使用更多方式来使用我的 API,您支付更多费用。你不知道我的服务,所以我知道这个想法很抽象。但原因是为移动平台创建兼容的 CMS 模块和库需要花钱开发,这样我就可以按需管理开发成本。 (也许我很傻)
    • Windows 物理上包含或缺少实际代码并且它们从上到下控制整个许可证实施堆栈。另一方面,您只需处理 HTTP 请求,客户端运行开源代码(大部分情况下)。你唯一的希望是有一些预编译的扩展,比如 ZendGuard 之类的东西,即使这样也不是无法破解的。法律保护是您最好的选择,而不是技术措施。
    • 由于他们非常频繁地更新他们的应用程序,我最好的猜测是他们只是经常轮换他们的令牌,只是指望任何非法使用最终都会自动过期的事实,这对这样的人来说太麻烦了用户跟上。不错的猫捉老鼠游戏。您还可以指望这种滥用始终保持在最低限度并处于最低水平,因为没有人会写一篇关于如何滥用 Google API 的博客文章,因为 Google 会在几分钟内知道这一点并可以将其关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2017-05-14
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多