security - 使用明文密码访问 REST API 的最佳实践

标签 security rest restful-authentication plaintext

我正在构建的应用程序使用 AJAX 连接到 REST Web 服务。该服务不需要 API key ,而是需要将纯文本用户名和密码作为 POST 数据与身份验证请求一起传输。除了这种糟糕的设计之外,用户/通行证组合与用于访问与服务相关的网站的凭据相同,这使得它们特别敏感。该服务确实使用了 SSL,但用户/密码仍然以纯文本形式出现在 JavaScript 源中。由于最明显的答案“不要使用具有如此明显的安全漏洞的服务”对我来说不是一个选择,是否有任何聪明的解决方案来保护用户名和密码?

此应用程序频繁请求 API 来处理实时数据,因此我试图避免在我自己的服务器上使用代理,这基本上会使我的开销增加一倍。这让我希望有某种客户端解决方案。

我将部署缩小的代码,这会限制可读性,但这很容易逆转,并且它不会混淆纯文本值,因此我希望有更强大的东西。

我正在使用 jQuery,我的请求非常典型。

$.ajax({
    type: "POST",
    url: "https://my.insecurewebservice.com/api/",
    data: JSON.stringify({
        "username": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2b464e6b4652464a424705484446" rel="noreferrer noopener nofollow">[email protected]</a>",
        "password": "plaintextpassword"
    }),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(response, status, request) {
        // perform the usual work here
    }
});

最佳答案

在这种 API 模型中无法保护此类数据。在某些时候,浏览器中的 JS 需要使用这些凭据进行 AJAX 调用,并且无论您在此之前做了什么(缩小、加密等),都必须撤消该操作才能传输服务器的密码。这是默默无闻的安全,而且根本不是安全。

您的选择是:

  • 让提供商更改其 API
  • 提示用户在网络 session 期间输入密码(听起来这不是一个选项)
  • 通过您自己的中间网络服务代理这些请求

听起来,代理选项是您最好的选择。这并不全是坏事,因为您也许可以在该层中进行一些缓存或其他优化。

关于security - 使用明文密码访问 REST API 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27936187/

相关文章:

angularjs - Meteor、Laravel RESTful API + AngularJS 或 Laravel 用于我的下一个 Web 应用程序

node.js - Vue.js 抛出多个警告 : Invalid prop: type check failed for prop "items". 预期数组,得到值为 ""的字符串

asp.net-core - ASP Core 2.0 app.UseJwtBearerAuthentication 失败

python - 如何在用户资源中插入 user_permissions 字段?

google-app-engine - 谷歌应用引擎 : Endpoints authentication with ID and password

ruby-on-rails-3 - Rails 3 RESTful 身份验证 - 未初始化常量 ApplicationController::AuthenticatedSystem

java - 人们去哪里获取安全警报通知?

c# - Newtonsoft TypeNameHandling.all 具有基本命名空间检查安全吗?

C# 存储数字的安全方式?

java - 有没有现成的软件可以实现我的Java数据传输加密?