【问题标题】:How do I secure password parameters in RESTful web service URIs?如何保护 RESTful Web 服务 URI 中的密码参数?
【发布时间】:2010-04-26 17:11:15
【问题描述】:

我是服务器端编程的新手,所以如果这里变得混乱,请原谅我。我已签约创建一个 Web 服务,以允许经过身份验证的用户访问数据库。用户必须输入登录名和密码。一直在阅读和阅读有关 REST 与 SOAP 的内容,当我遇到以下声明时,我认为我已经决定采用 RESTful 设计:“需要安全的数据不应作为 URI 中的参数发送。”这似乎是 RESTful 方法的主要缺点。我知道使用 https 会加密密码以防止中间人拦截,但这会将服务器日志和客户端历史记录作为可能的暴露点。是否有针对此问题的 RESTful 解决方案,或者我是否需要使用 SOAPy?任何建议表示赞赏。

【问题讨论】:

  • 为什么要通过 URI 传递密码,这显然是未加密的纯文本?如果是这种情况,那为什么还要首先输入密码呢?
  • 就像我说的,我是新手。在研究 Web 服务和 REST 与 SOAP 时,似乎正在形成的共识是 REST 更简单并且适用于大多数场景。在试图确定什么属于“大多数情况”以及什么不属于,我认为我发现了身份验证异常;也就是说,在 RESTful 设计中,所有内容都在 URI 或标头中传递,这两者都是易受攻击的。所以我只是想知道这是否属实,或者是否有一种安全且 RESTful 的方式来使用用户名和密码进行身份验证。

标签: security rest


【解决方案1】:

使用POST-type 请求传输必要的数据,并将敏感部分作为发布字段包含在内,使其成为请求正文的一部分,而不是 URI 中的参数。

【讨论】:

  • 我不确定这有什么帮助。你能详细说明一下吗? POST 不会通过 URI 传递数据,但仍会传递。 HTTPS 负责对数据进行端到端加密,但如果您以纯文本形式将密码存储在任何位置,则不会做太多事情。
  • OP 的问题涉及数据的传输,而不是数据在服务器上的存储。不在 URI 中传递安全数据的主要原因是 URI 通常由其他而不是您的个人应用程序记录,例如 Web 服务器请求日志和浏览器历史记录。相比之下,这些日志和历史记录通常记录 POST 字段。
  • 如果您确实需要记录 POST 字段,您可以encrypt the log file
【解决方案2】:

这是您的 Web 服务器配置的问题,而不是您的应用程序的问题。错误配置可能导致漏洞,这是一个很好的例子。 Web 服务器也可以记录 POST 请求,如果您的 Web 应用程序防火墙检测到攻击,这很常见。我会确保在 apache 中关闭日志记录,因为这可能不是您的应用程序正常运行所必需的。

另一种更常见的方法是使用 cookie 来维护会话。 cookie 的整个生命周期仍然需要使用 https 来保护。

【讨论】:

    【解决方案3】:

    我认为,要真正实现 RESTful,您应该使用 HTTP 身份验证(基本或摘要),因为强制先登录不符合 REST 的精神。

    不过,我希望这一点得到熟悉 REST 的人的证实(或反驳)。

    【讨论】:

    • 实际上,使用 REST 任何事情都不像肥皂那样严格,这可以解决他的问题。只要确保使用 https。
    • 另一种选择是使用客户端证书。您将服务器配置为仅接受使用您批准的证书或由您批准的证书颁发机构颁发的请求。这在需要公共访问的情况下可能不实用,但在您想要控制客户端列表的情况下,它是非常安全的。
    • @stand true。理想情况下,它是 解决方案。但是,正如您所说,对于公众访问来说,这并不是很“真实的世界”。
    猜你喜欢
    • 2011-06-16
    • 2014-09-13
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多