2017-04-25 10:24
@JFinal 非常感谢!我在 model 中使用 filter 可以利用 jsoup过滤标签会存在两个问题。1.如果过滤的字段可以为null,要做特殊处理否则会抛出异常。2.如果用户插入的内容只有一个script标签,而使用jsoup过滤掉,最后就会剩下一个空字符串直接放入数据库,空字符串入库感觉不太合适。#escape标签比较好用,想出另一种折中的方案,把escape的逻辑提取到工具类,对于需要做编码的model,增加一个encodeHtml方法,在模板上使用的时候通过#(x.encodeHtml() ??)把内容编码一次,在ajax接口上使用的时候则单独在java代码里面调用一次,返回移动端的接口则不做处理,虽然有点麻烦,但几种类型的接口都能兼顾到。
2017-04-24 18:39
@JFinal 在model的filter做html编码,会污染入库的原始数据,在web上显示数据没有问题,但当数据返回到移动客户端,就会出问题了,显示出来的都是编码后的数据。目前想到的第一种方法是用自定义Directive,但是在html里面很多地方都会用上,重复写了很多#encodeHtml()。第二种方法是在model上面增加一个encodeHtml()方法,对提供给后台使用的每一个controller接口做model.encodeHtml()操作,缺点也是每一个后台接口都需要做这部分重复操作。有没有更好的方法在出口上面做安全编码?