【问题标题】:How to prevent Client DOM Code Injection Vulnerability in Javascript?如何防止 Javascript 中的客户端 DOM 代码注入漏洞?
【发布时间】:2017-09-20 07:13:47
【问题描述】:

.../addAnnouncements.js 的第 xxx 行的方法函数获取客户端控制的数据 json 元素。该元素的值在客户端代码中使用,没有经过适当的清理或验证,并且 最终在.../addAnnouncements.js的linse yyy和zzz函数中集成到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 的要求吗?

【问题讨论】:

  • JSON 的东西每天都在变坏……什么是“json 元素”?
  • 嗨,Teemu,我在这里将 json 作为变量...它可以是任何结果或任何变量
  • JSON是一种数据传输格式,读入脚本时以字符串表示,字符串中没有“元素”。
  • 是的,我同意你的观点,JSON 是一种数据传输格式。你能建议如何清理 if(json.ERROR =='') { } 和 alert(json.ERROR);跨度>
  • 我很确定 Checkmarx 在这两种情况下都提到了警报。只需删除警报。无论它是否真的是一个安全问题,都值得商榷,您可以通过开发工具和用户脚本向 DOM 注入几乎任何东西。

标签: javascript jquery ajax


【解决方案1】:

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

JSON 是字符串格式,所以我们不能通过 dot(.) 访问

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

函数 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) {}
    }

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2021-03-21
    • 2021-02-04
    • 2013-03-07
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多