逃避JQuery AJAX结果并保留其原始价值

时间:2014-09-26 10:03:52

标签: jquery ajax xss

如果返回结果值为<script>alert('test');</script>,是否可以在div标签中准确打印值<script>alert('test');</script>

$.ajax({
                    url:'${pageContext.request.contextPath}/node/get/2.do',
                    method:'GET',
                    data:{name:nodeName, parentId: parentId},
                    dataType:'json',
                    success:function (result, textStatus, xhr){
                        $('#div1').html(result);
                    }
                    error: function(xhr, textStatus, errorThrown){
                        $('#div1').html('error');                   } 
                }))

更新:

很抱歉,以前使用创建网址是一个不好的例子。改为将其改为GET。直接使用.html()的主要问题是处理用户输入的不受信任的数据。如果var结果返回以下值,该怎么办:

<center>
  <script>
    setInterval(function(){
      alert("you have xss!");
    }, 2000);
  </script>
</center>

虽然期望值是

<center>Node 1</center>

2 个答案:

答案 0 :(得分:0)

而不是

$('#div1').html(result);

尝试

$('#div1').text(result);

注意: -

当您打算将值显示为简单文本时(如您的情况),请使用.text(…)

当您打算将值显示为html格式的文本(或HTML内容)时,请使用.html(…)

点击.text().html()了解详情。

答案 1 :(得分:0)

我找到了问题的答案。

以前当我转义&#34;结果&#34;中返回的值时变量,不仅符号被转义,而且空格也被转义。再次访问OWASP网站后,我找到了ESAPI 在返回AJAX请求之前,要在服务器端进行转义的库。