我正在尝试修复我的Web应用程序中的XSS漏洞,而且我遇到了jqGrid。
我为所有网格激活了'autoencode',文档说:“当设置为true编码(html编码)传入(来自服务器)和发布数据(来自编辑模块)。”
我的问题是我不明白为什么发布数据被编码。这样我就可以在我的数据库中获取html转义文本了。因此,这个数据库不会被其他应用程序读取(或者它必须解码所有文本),此外数据库搜索不再起作用。
那么,是否可以仅对从数据库中检索的数据进行编码并发布数据呢? 目前,我禁用了autoencode并在我的所有列上添加了格式化程序以逃避所有文本。这是唯一的方法吗?
答案 0 :(得分:2)
您可以使用serializeEditData
(如果使用form editing),serializeRowData
(如果使用inline editing)或serializeCellData
(使用时) cell editing)更改将在编辑期间发送到服务器的数据。要解码您可以使用的数据,例如$.jgrid.htmlDecode
。您可以枚举已发布数据的所有属性并解码相应属性的值。或者,您可以在服务器端使用已发布数据的解码。您在服务器上使用的任何技术都提供了可用于解码的简单方法。例如,在ASP.NET中,可以使用HttpServerUtility的HtmlDecode
/ HtmlEncode
方法。