跨站脚本:DOM Fortify

问题描述

目前正在为我的一个应用程序代码解决 DOM XSS,它报告了 winT 的 XSS(下面提供了伪代码)。

代码片段:

Var oMyObj = window.dialogArg;
var winT = oMyObj.title;

<span id="header">
 <script>
      document.write(winT);
 </script>
</span>

我尝试了几种方法来看看是否有帮助,但到目前为止仍在尝试..我想在这里请求看看是否有任何选项或方法有助于修复强化型 XSS。

我们正在发送静态信息以在上述情况下打印为页面/对话框标题和应用程序是防火墙后面的内部/Intranet 应用程序..但想看看是否可以解决

搜索和阅读与 XSS 相关的文章后尝试了以下操作:

  1. 将行“document.write”转换为“.textContent”,但它本身没有打印值
document.getElementsbyId("header").textContent = winT
  1. 试过用innerHTML代替document.write,打印出来但没有修正Fortify - 后来发现innerHTML也有XSS

  2. 尝试过如下所示的 htmlencoder -- fortify 仍然将其报告为问题。 https://portswigger.net/web-security/cross-site-scripting/preventing

function htmlEncode(str){
  return String(str).replace(/[^\w. ]/gi,function(c){
     return '&#'+c.charCodeAt(0)+';';
  });
}

也许我没有完全理解导致 XSS 发生的原因,这进一步导致无法找到上述问题的正确解决方案。

如果您能提供一些洞察力或正确方向的指导,将会有所帮助。谢谢。

解决方法

我已经使用 ESAPI 解决了上述问题

示例片段:

<changeSet author="okello" id="BiodataFields">
        <addColumn tableName="user" >
            <column name="dateOfBirth"  type="datetime(6)"/>
        </addColumn>
</changeSet>