问题标签 [breach-attack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
327 浏览

nginx - Nginx:根据引用主机名有选择地启用压缩

为了减轻 BREACH 攻击,我希望仅在$http_referer' 的主机名与我的服务器名称之一匹配时选择性地启用 gzip。

我该怎么做?我尝试使用valid_referers server_names;,但似乎 nginx 不允许gzip on内部 if 语句。当我将其包含在我的 conf 中时:

我明白了[emerg] "gzip" directive is not allowed here。必须是一种选择性地启用 gzip 的方法。

0 投票
0 回答
180 浏览

asp.net - 压缩整个响应,Cookie 除外

我如何告诉 ASP.Net 压缩响应,但不压缩响应中的 Cookie?所以所有的 HTML 输出,但不是 cookie。

背景:违反

BREACH攻击仍未解决。它适用于包含机密的 TLS 安全、gzip 压缩响应。

您登录的任何站点都应该启用 HTTPS,并且将继续在其响应中发回一个 cookie,该 cookie 具有攻击者可以攻击的完美秘密,因为如果他们能得到它,他们就会得到你的令牌,可以伪装成你。

对此没有令人满意的解决方案,但一种强有力的缓解措施是将秘密与响应的其余部分分开或根本不压缩。另一个是包含一个 CSRF 令牌。对于显示提交表单数据结果的页面,CSRF 令牌很好,因为无论如何我们都需要这样做,而且缓存在性能方面并不那么重要。但是对于静态页面,我们需要能够缓存,这使得 CSRF 令牌的权重太大。

如果我们可以告诉 ASP.Net 不要压缩 cookie,这是这些响应中唯一的秘密,我们会很高兴:

  • 缓存适用于需要它的静态页面
  • HTTPS 和 gzip 可以同时发挥作用,gzip 仅针对那一点点响应关闭
  • BREACH 已死

那么,这可能吗?如果可以,怎么办?即使使用像 HttpModule 这样执行 gzip 步骤的东西我也很好,只要它不会给您带来损坏的响应。

某种仅分离 gzip 压缩上下文的补丁或模块(BREACH 的主要建议解决方案)会更好,但这似乎要求太多。

请注意,对于 BREACH 是否可用于获取 cookie/会话令牌,安全社区似乎存在冲突:

它可以。 它不能。

0 投票
2 回答
1787 浏览

breach-attack - 如何防止 ASP.NET MVC Core 中的 BREACH 攻击?

有人建议我在我们的 ASP.NET MVC Core 站点中实现以下项目,以防止 BREACH 攻击。你如何实施它们?

  • 将秘密与用户输入分开。
  • 随机化每个客户端请求中的秘密。
  • 掩码秘密(通过 XORing 与每个请求的随机秘密有效地随机化)。
  • 通过添加随机数量的任意字节来混淆 Web 响应的长度。

我们已经在每个表单上实施了防跨站点伪造令牌并关闭了 Http 级别压缩。

任何帮助将不胜感激。

这是由该工具报告的:

https://www.acunetix.com/

先感谢您。

0 投票
1 回答
1238 浏览

security - 如何在不牺牲可用性或安全性的情况下为每个请求生成新的 CSRF 令牌?

本文建议我们应该在每个请求上更改我们的 CSRF 令牌以防止 BREACH 攻击。即,如果我们使用 gzip/brotli 和每会话 CSRF 令牌和 SSL,我们的令牌只有 1000 个请求就容易受到攻击。

假设这是真的,如何在不中断后退/前进和多个选项卡的情况下在每个请求上重新生成 CSRF 令牌?

显而易见的解决方案是在我们的会话中存储一组有效的 CSRF 令牌,而不仅仅是最近的一个,也许将其限制在 100 个左右。

但是如果我们使用 JWT 或其他东西呢?我们可以只在其中存储用户 ID,然后验证令牌没有过期并且属于当前用户,我们根本不需要将它存储在服务器上。唯一的问题是我们无法在用户注销时撤销 CSRF-JWT,这需要一个短暂的过期时间,但我们不希望它太短或者它在用户有机会提交之前就过期了形式。

解决这个问题的最佳方法是什么?

0 投票
0 回答
122 浏览

python - 如何为 django admin 随机化 csrf 令牌

我刚刚收到了来自我的 Django 项目的渗透测试者的漏洞报告。报告说我的 Django 应用程序容易受到BREACH ATTACK 的攻击。SSL 处于活动状态,cookie 被标记为安全,会话 cookie 被设置为安全。系统管理员关闭的 HTTP 压缩由我无权访问的 Nginx 控制。所以 gzip 是关闭的。现在我想为 django 管理员的每个客户端请求随机化 csrf 令牌,尤其是登录页面。有没有办法在 settings.py 中以简单的方式做到这一点,还是我必须编写自定义管理视图?这个问题的最佳实践是什么?

0 投票
1 回答
498 浏览

asp.net - .ASPX POST 请求 - 侵犯隐私:BREACH

根据网络检查报告,我们的网站属于隐私违规:BREACH。推荐的修复方法是:

  1. 禁用 HTTP 压缩

  2. 确保用户输入和密码不包含在相同的响应内容中

  3. 随机化秘密

我们从 IIS 应用 #1 禁用 HTTP 压缩 => 压缩 => 未选中静态和动态。哪个在我们的 DEV 上有效,但是当我们在 PRODUCTION 服务器中尝试时,它不起作用。*响应头仍然显示 c content-encoding: gzip。即使 HTTP 压缩已关闭

  • 我理解 HTTP 压缩被禁用的方式是检查响应头并确保没有内容编码。

下面是来自 PROD 服务器的示例响应标头。

此外,如何应用 2 和 3 的修复。报告显示问题:

TSM_HiddenField_=ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField&_TSM_CombinedScripts_=%3b% 3bAjaxControlToolkit%2c+Version%3d3.5.7.123%2c+Culture%3dneutral%2c+PublicKey令牌

ctl00_ContentPlaceHolder1_ToolkitScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS = PRexdxaxbhgeccgjdchdfcgcdefRP(在响应正文中修改)

0 投票
1 回答
681 浏览

html - 随机长度的 HTML 注释

在我访问的Goodreads页面的源代码末尾,在结束</html>标记之后有以下代码:

这样做的目的是什么?


当我搜索短语“这是一个随机长度的 HTML 评论”时,我得到了与 bypass -mitigation-railsSendGrid API v3相关的结果。

0 投票
0 回答
391 浏览

gzip - 如何有条件地在 Caddy 中应用 gzip 指令?

我正在尝试将 Caddy 配置为仅在 Referer 标头与特定域匹配时才使用 gzip。这是为了减轻潜在的 BREACH 攻击。

但是,我在 Caddyfile 中看不到允许我根据标头的值有条件地打开 gzip 的方法。

这里的 gzip 指令:

https://caddyserver.com/docs/gzip

仅允许基于路径或文件扩展名的条件应用程序。

希望这不涉及编写自定义指令?

0 投票
1 回答
379 浏览

spring-boot - 为 Cloud Foundry 上的 SpringBoot-Server 启用/禁用 HTTP 压缩

我在 Cloud Foundry 上有一个 Spring Boot 应用程序,并且想要停用以下 HTTP-Header 中使用的 HTTP 压缩: Accept-Encoding: gzip, deflate 。我想防止 BREACH 攻击。

manifest.yml 中是否有一个条目,我可以使用它禁用此压缩?

0 投票
0 回答
30 浏览

security - 如果用于用户注册,punycode 会占用两个电子邮件地址

本文中,作者有一条注释指出,在 punycode 中保存用于用户注册的电子邮件地址可以防止在从用户输入中向上转换电子邮件地址以进行规范化时发生 unicode 违规。

电子邮件地址“John@Gıthub.com”在 punycode 中转换为“xn--john@gthub-feb.com”。因此,我们按照这种方法在此处为一个用户屏蔽了两个地址。一个是“John@Gıthub.com”,另一个是“xn--john@gthub-feb.com”。

如何解决这个问题?