HTTPS(HTTP + SSL)中的查询字符串参数是否安全?

461

在使用HTTPS发送请求时,查询字符串参数是否会被加密?


http://www.securityweek.com/hackers-can-intercept-https-urls-proxy-attacks - Tom
4个回答

546

是的。查询字符串也使用SSL加密。然而,正如这篇文章所述,把敏感信息放在URL中是不明智的做法。例如:

URL存储在Web服务器日志中-通常每个请求的整个URL都存储在服务器日志中。这意味着URL中的任何敏感数据(例如密码)都以明文形式保存在服务器上。


58
这是否意味着,当DigitalOcean、Google或其他服务提供商要求您将API密钥放入查询参数中时,任何拥有只读访问权限的人都可以伪造您的身份?例如,如果Loggly的任何人泄露了信息,很多服务将受到影响? - Adrien
28
API密钥是短期令牌,通常只有一小时或一个月的有效期(用于OAuth和类似服务),但如果存在大规模违规行为,他们将使所有未使用的令牌无效。每个人都必须重新验证身份,使用他们(可能仍然安全的)密码。 - David Souther
10
如果敏感数据是一次性的(例如一次性令牌),放置敏感数据并不是一个真正的问题。 - Matthieu Charbonnier
23
@MatthieuCharbonnier 这是一个大胆的陈述。你能让我使用你的银行账户30分钟吗? - EralpB
31
@EralpB 不是,我想你误解了我的话。但我可以给你我的确认码,这个码已经被我使用过了,现在已经过时且无用。 - Matthieu Charbonnier
显示剩余3条评论

152

68

使用HTTPS时,整个传输过程,包括查询字符串、完整的URL和请求类型(GET、POST等),都会被加密。


51
注意!即使整个URL都被加密,SSL握手过程中仍可以看到主机名,然后才进行加密传输! - Matthieu Charbonnier
1
@MatthieuCharbonnier 这对于请求正文和头部信息也有效吗? - Must.Tek
2
@Must.Tek 我知道回复有点晚,但是对于任何后来阅读这个的人:不,Post Body和Headers是完全加密的,在初始SSL/TLS握手期间无法查看。这就是为什么通常在HTTPS连接中将Authorization作为头部传递(例如Bearer token)。 - eaydin
1
这些回答是误导性的。是的,在初始握手期间发送了主机名,但只有主机名,不包括GET参数。 - undefined

6
我不同意此处给出的建议 - 即使被接受答案的参考文献也得出结论: 可以使用查询字符串参数和HTTPS,但不要将其用于任何可能引起安全问题的内容。例如,您可以安全地使用它们来识别零件号或显示类型,如“accountview”或“printpage”,但不要将其用于密码、信用卡号码或其他不应公开的信息。 所以,不,它们并不真的安全...!

80
所有回答都认为它们很安全,问题并不是关于它们是否“安全”。问题是GET参数在HTTPS中是否加密,这个问题已经得到回答,并且您引用了其中的注意事项。我不知道您的答案在与问题相关方面要添加什么,因为它模糊而缺乏创意。 - Rob Grant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接