如何防止Javascript中的客户端DOM代码注入漏洞?

时间:2017-09-20 07:13:47

标签: javascript jquery ajax

xxx行的方法函数... / addAnnouncements.js获取客户端控制的数据 json元素。此元素的值在客户端代码中使用,而未经过适当的清理或验证 最终在linse yyy和zzz of ... / addAnnouncements.js中集成到HTML代码中。

脚本如下:

 function addAnnouncement() {
        try {
                var formData = $('form').serialize();
                $('div.block').block();
                jQuery.ajax({
                    type: "POST", 
                    url: "bat.ajax", 
                    data: formData,
                    dataType: 'json',
                    cache: false,
  xxx:                  success: function(json) {
  yyy:                      if(json.ERROR == '') {
                            alert("The announcement has been saved");
                            $('div.block').unblock();
                        } else {
  zzz:                          alert(json.ERROR);
                            $('div.block').unblock();
                        }
                    }, 
                    error: function() {
                        $('div.block').unblock();
                        alert('The request could not be fulfilled due an internal error, please try again.'); 
                    }
                });

        } catch(e) {}
    }

以下行可能会启用DOM代码注入攻击 .......

if(json.ERROR =='') {

 alert(json.ERROR);

有些人可以帮助我如何消毒上述场景以满足Checkmarx的需要吗?

1 个答案:

答案 0 :(得分:0)

请参考下面的代码应该是完整的帮助 -

  

JSON是字符串格式,因此我们无法通过点(。)

进行访问      

JSON.parse()用于JSON到Object的转换。现在我们可以访问了   通过使用点(。)。

function addAnnouncement(){

        try {
                var formData = $('form').serialize();
                $('div.block').block();
                jQuery.ajax({
                    type: "POST", 
                    url: "bat.ajax", 
                    data: formData,
                    dataType: 'json',
                    cache: false,
  xxx:                  success: function(json) {
                            var json = JSON.parse(json);
  yyy:                      if(json.ERROR == '') {
                            alert("The announcement has been saved");
                            $('div.block').unblock();
                        } else {
  zzz:                          alert(json.ERROR);
                            $('div.block').unblock();
                        }
                    }, 
                    error: function() {
                        $('div.block').unblock();
                        alert('The request could not be fulfilled due an internal error, please try again.'); 
                    }
                });

        } catch(e) {}
    }