【问题标题】:javascript: How to prevent abusive use of public apijavascript:如何防止滥用公共 api
【发布时间】:2016-08-11 14:39:16
【问题描述】:

我允许用户通过一次密码发送到用户手机号码来登录我的网站。

我的问题是我正在做 Api 调用以使用 jquery ajax 将 otp 发送到用户的手机号码。现在任何人都可以看到 api 调用并向我的服务器发出无限的 api 请求,这将立即使我的短信包过期。

如何避免滥用 API 调用?

【问题讨论】:

标签: javascript jquery ruby-on-rails api


【解决方案1】:

提供一些身份验证机制应该可以工作。这样,任何试图访问您的 API 的人都必须登录。将身份验证令牌存储在会话中并在服务器端进行验证。 还有其他技术,例如使用 API 机密/密钥。 请检查以下链接: https://stormpath.com/blog/secure-your-rest-api-right-way/

【讨论】:

  • 这对我有用,因为我想防止滥用我的 API,它本身提供身份验证机制。
  • 在 SMS OTP 之前必须进行登录名/密码或证书身份验证。 OTP 通常用于基于风险的交易。风险可以是用户信息风险或金融交易风险。在该步骤之前进行正常的登录/密码身份验证应该会有所帮助。
【解决方案2】:

Rails 已经有CSRF protection。您需要为您的 AJAX 请求启用它们。启用它们后,如果没有为每个 Web 请求重新生成的 CSRF 令牌,其他人将无法重复您的 AJAX 调用。

其他选项包括使用 rack-attack 限制来自同一 IP 的 API 请求的速率。

【讨论】:

  • 但攻击者可以轻松复制authentity_token字段并使用它进行API调用。请解释 crf 保护将如何保护滥用 api 调用。
  • CSRF 令牌仅对一个请求有效
  • 我在新选项卡中打开了一个表单,并将旧的authenticity_token 粘贴到该表单中并提交了该表单。在这种情况下,记录被创建。但是当我在新的隐身窗口或另一个浏览器中打开相同的表单并再次粘贴相同的真实性令牌时,它会给出错误“InvalidAuthenticityToken”错误。这是否意味着一个浏览器的 authenitcity_token 不能在另一个浏览器中使用? rails 在哪里存储真实性令牌??
  • 我认为 Rails 指南包含所有细节 - guides.rubyonrails.org/security.html
【解决方案3】:

您应该向您的服务器验证 API 请求。我假设服务器在你的控制之下。

一个想法可能是使用 JWT => https://jwt.io/

当然,在您的服务器上使用 HTTPS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多