如何检测 Edge 浏览器输入损坏错误是否已修补

How do I detect if Edge Browser input corruption bug has been patched

最近 Edge 浏览器有一个错误,其中 <option> 元素省略了 value 属性。

<select name="qty">
  <option>1</option>
  <option>2</option>
</select>

受影响的 Edge 浏览器将随机字符注入表单数据:qty=1Qqty=2Җ 或更糟 qty=29

Microsoft 于 7 月推出了 issue #1747791 in the July RS4 Windows 10 Update, kb4338819 的修复程序。通过此修复,他们没有增加浏览器版本号 17.17134。他们改为将操作系统内部版本号增加到 17134.165

我支持的应用程序继续收到旧版 Edge 用户的错误报告。我想检测使用受影响浏览器的用户并显示警告。

Edge 的损坏版本和修复版本都在 UserAgent 字符串中报告相同的版本号,17.17134。是否有另一种方法来检测 Edge 的版本或 OS 版本号?

如何检测此 Edge 浏览器输入损坏错误是否已修补?

我要做的第一件事是使用 javascript 在 <option> 上审计缺失 value 如果这是问题的根源,正如 link 你中提到的那样已发布。

然后,如果您无法嗅探用户代理中的差异,一种测试方法是以编程方式 (javascript) 将屏幕外表单提交到屏幕外或隐藏的 iFrame 目标中遇到用户代理。

这将在页面加载时完成,无需用户交互

然后通过 postMessage() 调用验证服务器端和 return 到 iframe 的页面,该调用会告诉父页面是否存在问题。

父级也需要 postMessage 事件侦听器。

表单和 iframe 都可以根据需要使用脚本插入 dom

可以创建 JavaScript 函数来在用户打开网站时检测 Edge 浏览器及其版本。

如果是有问题的版本则通知用户使用其他浏览器并且不允许任何进一步的交互。

如果是任何其他版本的 Edge,则让用户使用该站点。

此致

迪帕克

来自@charlietfl 的改编解决方案

隐藏的 iframe 仅在用户具有受影响的内容时显示 用户代理。今天,这包括最新的 Edge 浏览器,但是 在 10 月份,UserAgent 中的版本应该会再次增加。

打开 iframe 而不是与父 window 交互 到可以访问用户会话的页面。它呈现 HTML 形式 受错误影响的类型,并立即发布自己。 检查 POST 数据是否损坏,并提供结果 到用户会话。

相当明显的javascript(与jquery)看起来有点像这样:

  % if ( $do_check ) {
    <iframe id="edge_browser_check_iframe" style="display:none;"></iframe>
    <script type="text/javascript">
      if ( /Edge\/17\.17134/.test( navigator.userAgent )) {
        $("#edge_browser_check_iframe").attr(
          'src',
          'edge_browser_check-iframe.html'
        );
      }
    </script>
  % }