将登录凭据作为纯文本传递到HTTPS URL是否安全?
https://domain.com/ClientLogin?Email=jondoe@gmail.com&Passwd=123password
更新:因此,假设这不是在浏览器中输入,而是以编程方式生成并通过POST请求(而不是GET请求)进行请求。它安全吗?
在GET
请求中使用此类型的URL(即在浏览器中键入URL)并不安全,因为请求的URL将保存在浏览器历史记录和服务器日志中。
但是,作为POST
的{{1}}提交{(1}}请求(即提交表单),同时将凭据作为https://domain.com/ClientLogin
的一部分传递是安全的,因为POST body
在连接到请求的URL后加密并发送。因此,表单操作将为POST body
,表单字段值将在https://domain.com/ClientLogin
中传递。
以下是一些帮助我更好地理解这一点的链接:
Answer to StackOverflow Question: Are https URLs encrypted?
Straightforward Explanation of SSL and HTTPS
答案 0 :(得分:16)
不。他们不会在途中被看到,但他们会留在:
如果可能的话,在身份验证时使用POST over HTTPS,然后设置“经过身份验证”的cookie,或者通过HTTPS使用HTTP摘要授权,甚至通过HTTPS使用HTTP Basic身份验证 - 但无论你做什么,都不要把URL中的秘密/敏感数据。
编辑:当我写“使用POST”时,我的意思是“在POST字段中通过HTTPS发送敏感数据”。发送POST http://example.com/ClientLogin?password=hunter2
与使用GET发送它一样错误。
TL; DR:不要在网址中输入密码。如初。强>
答案 1 :(得分:1)
在url参数中传递登录信息并不安全,即使使用SSL
也是如此使用SSL在POST正文中传递登录信息被认为是安全的。
如果您使用的是SSL,请考虑使用HTTP基本身份验证。虽然没有SSL这是非常有问题的,但它并不比带有凭据的POST更糟糕,它可以达到你想要的效果,但是根据已建立的标准而不是自定义字段名称来实现。