2020-10-16 00:03
在 JsoupFilter 之中,这个类里头有一些过滤的方法,然后在 Share、Project、Feedback 以及 ShareReply、FeedbackReply 这五个 Model 中有使用
XSS 防御有很多方案,如果你的系统用户提交的口子比较少的话在 model 中过滤是比较方便的
如果用户提交数据的口子很多的话,可以扩展一个 MyHttpServletRequest ,用它对底层的 request 进行一次包装,也就是内部持有它:
public class MyHttpServletRequest extends HttpServletRequest {
private HttpServletRequest request ;
public MyHttpServletRequest(HttpServletRequest req) {
this.request = req;
}
在这里覆盖一些方法,进行 XSS 过滤操作
}
然后用一个全局拦截器将之替换:
Controller c = inv.getController();
request = new MyHttpServletRequest(c.getRequest());
c.setHttpServletRequest(request);
inv.invoke();
当然,用 Handler 规范会更方便:
void handle(String target, HttpServletRequest req, ...) {
next.handle(target, new MyHttpServletRequest(req), ...);
}
2020-10-15 16:57
@alldzz 已添加: https://gitee.com/jfinal/jfinal/commit/ae947ec9603cc97979259ff28befb37a2a7af63d
2020-10-15 15:39
@alldzz 将缓存起来的 kv 值清掉,然后新进入的值都是新版本 kv 序列化以后的结果就可以解决
jfinal 这边可以为 Kv 添加 serialVersionUID,但添加这个东东代码稍稍难看点
2020-10-15 13:58
@alldzz 统一 serialVersionUID 就能解决这个问题,是一个好办法,这个变量控制序列化与反序列化