HTTP 身份验证与复杂 URL

HTTP Auth vs Complex URL

假设我需要提供一个带有私有数据的安全端点。考虑 user1password1234。两者在安全性上有什么区别吗:

  1. https://website.com/myendpoint/user1/password1234

  2. https://website.com/myendpoint 使用上面给出的凭据的 HTTP 基本身份验证

在我看来实际上没有区别,但我没有任何 specific/strong 论据。

确实有很大的不同。根据最佳做法,您不应在 url 中包含任何敏感信息(更不用说密码了)。 原因如下:

  • Urls 被记录在服务器上(通常是文件,但其他数据存储可能更糟)这可能允许攻击者提取此数据,例如备份。

  • URL 可能会在中间代理上被记录 and/or 检查。考虑使用 https 检查的公司代理。

  • URL 缓存在客户端并添加到浏览器历史记录中。已获得对 PC 的访问权限的脚本或恶意用户可能会从那里提取密码。即使预期的客户端是程序化的,也要考虑出于任何原因想要使用您的应用程序或 api 来自浏览器的用户(用户非常有创意:))。

  • 网址可能会显示在屏幕上。

当然,并非所有这些都适用于所有用例,但其中一些是您无法控制的。所以最好不要在您的 url 中包含任何敏感数据。 Http basic 优于 https。