apache - 如何避免浏览器在发送响应后呈现恶意内容

标签 apache security http https

<分区>

我们目前正在研究 OWASP 安全修复程序,并且我们确定了一种攻击场景,我们正试图找出一种可能的解决方案:

  1. 用户向我们的应用程序发送了一个有效的 HTTPRequest。用户浏览器中的 URL 设置为我们的应用程序 url,例如http(s)://www.abc.com/request
  2. 应用程序通过 Apache 处理请求并发送响应。
  3. 当响应在途中时,攻击者会拦截响应并将整个响应的内容替换为一些恶意站点或消息,例如“你被黑了!!”
  4. 响应在用户的浏览器中呈现,URL 仍指向浏览器中的 http(s)://www.abc.com/request,但内容是恶意的。这让用户相信它仍在我们的应用程序中。

我们可以通过我们的代理工具复制这个场景。有什么方法可以识别和防止通过 Apache 或自定义 HTTP header 在浏览器中呈现此类响应?

我们将不胜感激任何帮助/指点。

在第一个答案后添加:

再考虑一种情况:

  1. 用户向我们的应用程序发送了一个有效的 HTTPRequest。
  2. 攻击者拦截请求并将其转发到某个恶意站点而不是我们的应用程序。在这里,用户浏览器中的 URL 也设置为应用程序 URL,例如http(s)://www.abc.com/request 但内容将是恶意网站。

这也可以通过 HTTPS 实现。

在场景 (2) 中,虽然我们的网站是 HTTPS,但恶意网站是纯 HTTP。因此,在路由请求时,浏览器上不会出现证书警告。

最佳答案

对于 HTTP,您对此无能为力,因为拦截器还可以修改任何 HTTP header ,而不仅仅是内容。如果您的应用程序响应的真实性很重要,请完全不要通过 HTTP 提供服务,并教育您的用户使用和验证 HTTPS 网站。

使用 HTTPS,攻击者应该无法在用户浏览器没有注意到和中止的情况下替换响应的内容,因此第一种情况的第 3 步应该是不可能的。 “应该”,因为这假定 HTTPS 和底层加密的安全性,并且攻击者无法获得受攻击域的技术上有效的证书。

编辑:

在上述假设的限制下,第二个场景的第 2 步也应该不可能使用 HTTPS。 (HTTPS 被保存,安全实现,并且攻击者没有持有被攻击域的证书。)如果您的代理能够执行此攻击(或第一个场景中的攻击) HTTPS连接,请

  • 确保代理在没有访问您服务的证书私钥的情况下这样做
  • 确保呈现给客户的 url 确实来自您的服务域
  • 如果两者都是,请按照负责任的披露通知受影响软件的维护者(可能是客户端软件,在第二种情况下,请求甚至可能无法到达实际服务)

关于apache - 如何避免浏览器在发送响应后呈现恶意内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427381/

相关文章:

java - 控制对通信层的访问

javascript - 在 ajax 调用期间将 POST 转换为 GET

php - POST 请求来源

ruby - 在 Apache 上运行 Ruby 应用程序

php - 如何为指向我的服务器的域动态创建新的 LetsEncrypt/Certbot SSL 证书?

apache - 阻止 Apache Commons VFS 尝试使用 SSL

java - 修改catalina.policy

perl - 如何在 Firefox 和 Perl 之间自动化和共享 session ?

http - Firebug 不显示 302 响应

php - 在不同服务器上安装 Apache、PHP 和 MySQL