jqgrid跨站腳本漏洞解決
阿新 • • 發佈:2018-01-27
之間 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跨站腳本漏洞解決