2011-02-12 208 views

回答

87

当您将用户名和密码放在主机前时,这些数据不会以这种方式发送到服务器。而是根据所使用的身份验证模式转换为请求头。大多数情况下这将是我在下面描述的Basic Auth。类似的(但是显着不常使用的)认证方案是当今提供可比较的安全特征的Digest Auth

使用基本身份验证,从问题的HTTP请求将是这个样子:

GET/HTTP/1.1 
Host: example.com 
Authorization: Basic Zm9vOnBhc3N3b3Jk 

像串散列可以看到有由浏览器创建这样的:base64_encode(username + ":" + password)

对于HTTPS传输的外部人员,这些信息是隐藏的(就像HTTP级别的其他所有内容一样)。尽管如此,您应该注意登录客户端和所有中间服务器。用户名通常会显示在服务器日志中,但密码不会。但这并不能保证。当您使用例如客户端在客户端上调用该URL时curl,用户名和密码将在进程列表中清晰可见,并可能在bash历史记录文件中显示。

当您使用the approach by ayush,用户名和密码将总是在你的web服务器的服务器日志,应用程序服务器,缓存转起来,......除非你专门配置了服务器无法登录了。这仅适用于能够读取未加密的http数据的服务器,例如应用服务器。

基本认证是标准化的,由浏览器通过显示这个小小的用户名/密码弹出来实现。当您将用户名/密码放入通过GET或POST发送的HTML表单中时,您必须自己实现所有登录/注销逻辑(这可能是一个优点)。但你应该从来没有通过GET参数传输用户名和密码。如果必须,请使用POST。防止默认情况下记录此数据。

当今天通常使用带有用户/密码输入表单和随后的基于cookie的会话来实现身份验证机制时,您必须确保密码是使用POST请求传输的,还是使用其中一种标准化身份验证仅限上述方案。

结论我可以说,通过HTTPS传输数据是安全的,只要您注意密码不会出现在意想不到的地方。但该建议适用于以任何方式传输任何密码。

+0

当你说用户名和密码将清晰可见“进程列表”上时,你是什么意思?另外,非基本身份验证方案呢? – Pacerier 2014-03-15 10:45:53