【问题标题】:Building API - safe way to send password构建 API - 发送密码的安全方式
【发布时间】:2011-11-07 15:27:22
【问题描述】:

我正在构建一个 REST API,但我怀疑密码的发送方式是否安全?

密码是这样在 URL 中发送的:

https://www.example.com/api-version/user-name/password/

【问题讨论】:

    标签: security rest restful-authentication


    【解决方案1】:

    是的。不要那样做。要么使用HTTP Basic authentication,要么将访问令牌(例如 OAuth 令牌)作为参数传递,即

    http://www.example.com/api-version/end-point/?access_token=...

    【讨论】:

    • 即使发送access_token 或使用 HTTP 基本身份验证在不使用 SSL 时也是不安全的,它仍然容易受到 MITM 攻击。
    • 总比放在网址里好;如果它对于 Twitter 和 Facebook 等网站足够好,那么对于“普通”网站和网络应用程序也足够好。我不认为有一种万无一失的方法可以将数据从一台机器传输到另一台机器,如果有人真的想得到它,它就会以某种方式被拦截。
    【解决方案2】:

    通过 SSL 加密连接以 POST 有效负载(而不是 URL!)发送它。按照您的建议发送密码是非常不安全的。

    【讨论】:

    • 我知道最好在 POST 有效负载中发送它(也更安静),但我不认为在 URL 中发送密码使用 SSL 时,是不安全,因为 URL 也被加密了,对吧?
    • 如果通过浏览器访问,密码将在浏览器历史记录中弹出。密码也将保留在代理等中。
    • 我不认为密码会留在代理中(因为整个通信都是加密的),但它肯定会保留在浏览器历史记录中。
    • 查询是不是太留在浏览器历史里了?
    • 是的,它在例如 Chrome 开发者工具或 Mozilla FireBug 中可见,但它不像 Web 浏览器历史记录中的条目那样可见。首先,您必须激活此类工具才能记录流量,其次,它不会像在网络浏览器历史记录中那样存储很长时间(关闭网络浏览器,firebug 请求历史记录就会消失)。
    猜你喜欢
    • 2013-12-15
    • 2015-11-13
    • 1970-01-01
    • 2020-02-07
    • 2011-12-12
    • 1970-01-01
    • 2018-03-13
    • 2016-08-18
    • 2013-08-17
    相关资源
    最近更新 更多