如何检测是否修复了Edge浏览器的输入损坏漏洞?

4
最近Edge浏览器出现了一个bug,涉及到<option>元素,当value属性被省略时。
<select name="qty">
  <option>1</option>
  <option>2</option>
</select>

受影响的 Edge 浏览器会在表单数据中注入随机字符:qty=1Qqty=2Җ,甚至更糟糕的是 qty=29
微软在七月份的 问题 #1747791 中推出了修复方案,该修复方案包含在 Windows 10 七月 RS4 更新 kb4338819 中。虽然修复了此问题,但他们没有增加浏览器版本号,17.17134。相反,他们将操作系统版本号增加到了 17134.165
我支持的一个应用程序仍然收到来自旧版本 Edge 用户的错误报告。我想检测到使用受影响的浏览器的用户并显示警告。
Edge 的已修复和未修复版本都在 UserAgent 字符串中报告相同的版本号17.17134。是否有其他方法可以检测 Edge 的版本或操作系统版本号?
如何检测此 Edge 浏览器输入损坏漏洞是否已修复?

3
如果您尝试使用JS获取<select>的值,是否存在同样的问题?为什么不直接在<option>上设置'value'呢? - charlietfl
1
我唯一的建议是,当用户使用不支持的浏览器时,显示一条消息并建议用户使用其他浏览器或您认为合适的浏览器。同时,请确保服务器端验证也能捕获到这种情况。 - charlietfl
好的想法--我已经做过了,但是被要求找到一个更有针对性的解决方案。 - mjac
1
另一个方法是在检测到该用户代理时,在隐藏的iframe目标中发布虚拟的离线表单,并在页面加载时验证它而不需要用户交互。然后使用postMessage告诉父级是否存在问题。不知道IE hack的日子是否会结束! - charlietfl
为什么不直接在<option>上设置“value”:应用程序中有成千上万个<option>的出现。审核所有这些超出了我在此问题中规定的范围。 - mjac
显示剩余2条评论
3个回答

3
首先,我会使用JavaScript审核缺失的,如果这是问题的根源,就像链接中提到的那样。
然后,如果您无法嗅探用户代理中的差异,一种测试的方法是在遇到该用户代理时,通过编程(JavaScript)将一个屏幕外表单提交到一个屏幕外或隐藏的iFrame目标中。
这将在页面加载时完成,没有用户交互。
然后,在服务器端进行验证并返回一个页面到iframe,用postMessage()调用告诉父页面是否存在问题。
还需要在父级中添加postMessage事件侦听器。
表单和iframe都可以使用脚本按需插入到dom中。

由于这个版本的Edge应该支持ServiceWorker,因此可能无需调用服务器即可完成此操作。 - Kaiido

0

从@charlietfl的解决方案进行了调整

只有当用户使用受影响的用户代理时,才会显示隐藏的iframe。今天,这包括最新的Edge浏览器,但在十月份,UserAgent中的版本应该再次增加。

与其与父窗口交互,iframe打开到一个可以访问用户会话的页面。它呈现了一种受错误影响的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>
  % }

-2
一个解决方法是创建JavaScript函数来检测Edge浏览器及其版本,当用户打开网站时。
如果是有问题的版本,则通知用户使用其他浏览器,并不允许任何进一步的交互。
如果是Edge的其他版本,则允许用户使用该网站。
问候,
Deepak

问题是 如何检测 Edge 浏览器输入损坏漏洞是否已经修复? 你的答案是 尝试 [检测 Edge 浏览器输入损坏漏洞是否已经修复]... - Kaiido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接