我在NGINX中设置了http-https重定向配置:
server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri;
}
我的问题是:从用户最初访问我的应用程序的登录页面到发布他的用户名+密码,在重定向到HTTPS之前通过HTTP清除凭据的时间是否存在?
答案 0 :(得分:1)
这取决于您的登录表单(它应该始终只发布到https网址),但根据此信息,我认为不是,当按预期使用时,密码总是超过https 。
但是,您可能需要注意一些事情并添加更多保护(深度防御),因为攻击的重点是让事情不按预期进行。 :)
攻击者可能能够从用户的角度降低与http的连接,而攻击者自己则与服务器保持安全连接。请注意,即使服务器甚至没有响应普通的http,这也会起作用。请参阅this video或this link(以及其他许多内容)。解决方案是HSTS(见下文)。
如果攻击者可以以任何方式将普通的http请求注入到通过普通http发送凭据的客户端浏览器中,那么这些凭据将不受保护。这适用于发布的用户名/密码,但也适用于会话cookie,这相当于会话期间的用户凭据。因此,这意味着如果攻击者可以插入带有src="http://yoursite.com"
的图像,则会话cookie将以明文形式发送。响应将根据您的nginx设置进行重定向,但为时已晚。始终将会话cookie设置为secure
可以解决此问题(但不是另一个关于发布凭据的问题,可以通过HSTS进行缓解)。
您的网站应该有一个Strict-Transport-Security
响应标头,这样一旦浏览器有机会与服务器通话而没有中间人攻击者删除标头,它将记得使用https甚至如果用户没有在网址栏中明确指定它。
Strict-Transport-Security: max-age=31536000; includeSubDomains
有关HSTS的更多信息,请here。