用户名和密码在httpsurl

考虑URL: https:// foo:password@example.com

上面例子中的用户名/密码部分是否符合这个问题定义的“URL参数”?

当你把用户名和密码放在主机前时,这些数据不会以这种方式发送到服务器。 而是根据所使用的身份validation模式转换为请求头。 大部分时间这将是我下面描述的基本authentication 。 一个类似的(但不太经常使用的)authenticationscheme是现在提供可比的安全function的Digest Auth 。

使用基本身份validation,来自问题的HTTP请求将如下所示:

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

像你在那里看到的string散列是由这样的浏览器创build的: base64_encode(username + ":" + password)

对于HTTPS传输的外部人员来说,这些信息是隐藏的(就像HTTP层面的所有其他信息一样)。 您应该照顾login客户端和所有中间服务器。 用户名通常会显示在服务器日志中,但密码不会。 虽然这并不能保证。 当你用例如curl在客户机上调用这个URL时,用户名和密码将在进程列表中清晰可见,并可能出现在bash历史文件中。

当您使用ayush的方法时 ,用户名和密码将始终在您的networking服务器,应用程序服务器,caching的服务器日志中出现,除非您专门configuration您的服务器不logging它。 这只适用于能够读取未encryption的http数据的服务器,例如您的应用程序服务器。

基本validation是标准化的,并通过浏览器显示这个小小的用户名/密码popup窗口来实现。 当你把用户名/密码放到通过GET或POST发送的HTML表单中时,你必须自己实现所有的login/登出逻辑(这可能是一个优点)。 但是,您绝不应该通过GET参数传输用户名和密码。 如果必须,请使用POST。 防止默认情况下logging此数据。

当使用用户/密码input表单和随后的基于cookie的会话来实现身份validation机制时,您必须确保密码是使用POST请求传输的,还是仅使用上述其中一种标准化身份validationscheme传输的。

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