问题描述
目前正在为我的一个应用程序代码解决 DOM XSS,它报告了 winT 的 XSS(下面提供了伪代码)。
代码片段:
Var oMyObj = window.dialogArg;
var winT = oMyObj.title;
<span id="header">
<script>
document.write(winT);
</script>
</span>
我尝试了几种方法来看看是否有帮助,但到目前为止仍在尝试..我想在这里请求看看是否有任何选项或方法有助于修复强化型 XSS。
我们正在发送静态信息以在上述情况下打印为页面/对话框标题和应用程序是防火墙后面的内部/Intranet 应用程序..但想看看是否可以解决
- 将行“document.write”转换为“.textContent”,但它本身没有打印值
document.getElementsbyId("header").textContent = winT
-
试过用innerHTML代替document.write,打印出来但没有修正Fortify - 后来发现innerHTML也有XSS
-
尝试过如下所示的 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>