1. 程式人生 > >jqgrid跨站腳本漏洞解決

jqgrid跨站腳本漏洞解決

之間 cell == var 技術 gin eight escape !=

問題描述:

  jqgrid版本4.5.2

  用戶輸入值為<script>alert(123)</script>時,jqgrid默認的展示方法會將字符串轉換為dom元素,於是就產生了這樣的情況

  技術分享圖片

  一些不懷好意的人就會通過這些方法對項目發起攻擊。

如下提供兩種修改方案:

  假設var strData = "<script>alert(123)</script>";是原數據

  (1)使用jqgrid的數據格式化方法(colModel.foramter)修改源數據,去掉特殊字符(推薦)

     {name: ‘NAME‘, index: ‘name‘, hidden: false, formatter: formateHtml},

function formatHtml(cellValue,option,cell){
	if(undefined != cellValue && null != cellValue){
		return escapeHTML(cellValue);
	}
	return "-";
}

function escapeHTML(a){
	a = "" + a;
    return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/‘/g, "‘");;
}

  

  (2)修改jqgrid的源代碼,在jqgrid調用formatter方法之前將數據格式化

    搜索

      var h = a.p.colModel[e];

    這句代碼之後有一個

      if (h.formatter !== void 0) {

    在它們之間加上   

if("string" === typeof d){
	d = "" + d;
	d = d.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/‘/g, "‘");;
}

  

jqgrid跨站腳本漏洞解決