使用纯文本密码访问REST API的最佳实践

时间:2015-01-14 05:06:55

标签: security rest restful-authentication plaintext

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

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

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

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

$.ajax({
    type: "POST",
    url: "https://my.insecurewebservice.com/api/",
    data: JSON.stringify({
        "username": "me@mymail.com",
        "password": "plaintextpassword"
    }),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(response, status, request) {
        // perform the usual work here
    }
});

1 个答案:

答案 0 :(得分:2)

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

您的选择是:

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

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