function viewAcc() {
var errorMsg = "";
var result = true;
$(".errorView").hide();
var accNum = document.getElementById('custAccNum').value;
var accType = document.getElementById('custAccType').value;
$("#overlayPopup").show();
$.ajax({
url : '<attribute:resourceURL/>',
data : {
"custNo" : accNum ,
"custType" : accType
},
success : function(data) {
if (data == 'CUS_ACC') {
window.location = "/cust/account/c";
} else {
$("#overlayPopup").hide();
//display warning
$(".errorView").show();
$(".errorView").html(data); // <--- XSS line
e.preventDefault();
}
},
cache : false,
dataType : 'text',
error : function(error, textStatus, errorThrown) {
alert('error in ajax call: ' + textStatus);
console.log('error in ajax call: ' + textStatus);
window.location = "/cust/account/c/lookup";
},
timeout : ajaxTimeOutMilliSeconds
});
}
因此,veracode指出我在$(".errorView").html(data);
上遇到了问题
我该如何解决?如果我只是将其转换为文本,它是否会像html一样显示在客户端上?
答案 0 :(得分:1)
您可以简单地使用.text()
而不是.html()
。如果您没有来自服务器的任何标记,那么这是一个完全可行的选择,因为.text()
可以防止将内容解释为HTML
//doing sc+ript is only needed here because Stack Snippets otherwise throws an error.
var msg = "This is <b>a message</b> with <script>console.log('some code')</sc"+"ript>";
$("#msgHtml").html(msg);
$("#msgText").text(msg);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Message via .html():</h3>
<div id="msgHtml"></div>
<h3>Message via .text():</h3>
<div id="msgText"></div>
答案 1 :(得分:0)
不要盲目相信那些容易受到XSS攻击的工具。
只有data
的值不可信时,您才有XSS的风险。由于它来自您自己的服务器,因此您应该已经对XSS问题的数据进行了清理,然后再将其发送到对Ajax请求的响应中。