我需要构建一个大型Web应用程序,其中某些部分包含感性数据并且应该受到保护。由于性能的原因,我不能完全使用https所以我的建议是:使用http作为不安全的部分,使用https作为安全部分。但从可维护性和安全性的角度来看,将http与https混合似乎是一种糟糕的应用程序设计。这种情况的最佳做法是什么(非常感谢文章或书籍的一些有用链接)?
但是,如果混合http / https是可以接受的,那么我该如何防止下一个漏洞: 在一个http会话期间,一个中间人改变了一些秘密地将恶意请求直接发送到https page =>的html。由于html部分,应用程序的https部分实际上变得不安全了?
答案 0 :(得分:3)
启用SSL(HTTPS)并不意味着您的应用程序是安全的。
首先,设计应用程序以启用安全方案。您似乎对设计安全应用程序知之甚少。简而言之,非常基本,你需要完成这两件事:
请注意,通常,对于面向公众的Web应用程序,SSL(HTTPS;提供浏览器可以验证的服务器证书)涵盖服务器到客户端身份验证,并且某种类型的客户端到服务器身份验证用户名/密码组合,OpenID等
然后,开始考虑如何建立加密(SSL,非常粗略地说)。对于低容量站点SSL实施,如果您选择的Web服务器正常。为大批量生产网站提供许多硬件加速解决方案。
答案 1 :(得分:3)
使用HTTPS仅用于密码是没有意义的。如果您在任何时候传输经过身份验证或将通过HTTP进行身份验证的会话ID,那么您明显违反了OWASP A9-Insufficient Transport Layer Protection。然后可以使用Firesheep等攻击工具来劫持帐户。
HTTPS是一种非常轻量级的协议,协议中最昂贵的部分是为将来与该客户端进行交易而缓存的握手。要以安全的方式拥有混合的HTTPS / HTTP应用程序,您必须拥有第二个域名。因此,请将您的主域www.domain.com
作为经过身份验证的域名static.domain.com
。然后有{{1}}的不安全内容。请记住,如果您在同一页面上显示混合的https / http内容,则攻击者可以像XSS一样影响应用程序。 HTTP-Only Cookies可用于防止会话ID被劫持。但这不是一个理想的解决方案。如果您真的关心安全性,那么您将使用纯HTTPS。
答案 2 :(得分:0)
如果使用ASP.NET签出此问题:ASP.NET Security Best Practices。它涵盖了与ASP.NET之外相关的安全方面,例如XSS,它与HTML篡改问题有关。
总的来说,如果预计非安全页面不会收到大量流量,那么在整个Web应用程序中要求HTTPS更为简单。这样,您就可以使用一个简单的规则来阻止打开非HTTPS页面。
但是,如果您确定性能是一个真正的问题,那么可以使用两种协议的Web应用程序。然而,您必须评估所有可能的安全漏洞。例如,如果cookie用于在安全页面上进行身份验证,那么这些cookie只能通过HTTPS发送。