文档章节

Beetl解决XSS问题(AntiSamy)

leon_rock
 leon_rock
发布于 2014/08/11 19:41
字数 412
阅读 2041
收藏 24

很多时候,我们为了安全,会对存储的信息,进行转义,过滤等处理,这样带来的坏处是,破坏原始的数据,而且转义会占用多余的空间.

本人使用JFinal框架,开始考虑过全局设置过滤器,有的不需要的也会转义,不是很友好~

后来发现这边文章http://www.iteye.com/topic/1123423 ,通过Beetl来处理XSS这一类的问题

首先,自定义一个格式化类XSSDefenseFormat.java

import org.apache.commons.lang.StringEscapeUtils;
import org.beetl.core.Format;
import org.owasp.validator.html.*;
/**
 * Created by yinjun622 on 14-8-11.
 */
public class XSSDefenseFormat implements Format {


    @Override
    public Object format(Object data, String pattern) {
        if (null == data) {
            return null;
        } else {

            try {
                Policy policy = Policy.getInstance(PathKit.getRootClassPath()+"/antisamy.xml");  //antisamy.xml采用官方给出的ebay的模板
                AntiSamy as = new AntiSamy(policy);

                String content = (String) data;
          
          if ("escape".equals(pattern)) {
                    content = StringEscapeUtils.escapeHtml(content);
                }

          // clean content
                CleanResults cr = as.scan(content);
                content = cr.getCleanHTML();

                return content;

            } catch (ScanException e) {
                return "系统错误";
            } catch (PolicyException e) {
                return "系统错误";
            }

        }
    }
}





antisamy.xml文件地址:

http://git.oschina.net/yinjun622/JFinal-Shiro-JDBC-Demo/blob/master/antisamy.xml


然后注册该格式化
groupTemplate.registerFormat("xss", new XSSDefenseFormat());



最后针对需要的地方,进行xss处理,默认是不对html进行转义输出的,因为在使用副编辑器后,会带用html,转义的话页面显示需要处理,所以默认不转义.

${a.name, xss}


如果输出的html需要转义那么使用:

${a.name, xss="escape"}




使用结果不再弹出alert提示

可以根据自己实际需求,自定义一些其他方法.

© 著作权归作者所有

leon_rock

leon_rock

粉丝 73
博文 75
码字总数 17541
作品 0
大连
高级程序员
私信 提问
加载中

评论(5)

leon_rock
leon_rock 博主

引用来自“shakegames”的评论

算了,已解决
很久没登录~
s
shakegames
算了,已解决
s
shakegames
楼主用的beetl版本是2+吗,我照楼主的方法谢了注册了xss使用的时候提示未注册
leon_rock
leon_rock 博主

引用来自“闲.大赋”的评论

好文章,我转发一下到ibeetl.com
强烈支持~~ 更新了一下,添加AntiSamy模块
闲大赋
闲大赋
好文章,我转发一下到ibeetl.com
Preventing XSS with JSOUP

JSOUP is XSS prevention tool. Jsoup can detect xss script in html and url also. Now i am giving example with url. Jsoup can validate the url with the help of "isValidate()" meth......

凯文加内特
2015/08/10
101
0
[Security]XSS一直是个棘手的问题

虽然现在IE10和chrome可以自动过滤掉 <script>alert('XSS')</script> 但是 <!DOCTYPE html> <head> //<![CDATA[ //]]></script></head><body> </body></html> <!DOCTYPE html> <head> </hea......

tdoly1
2013/06/08
514
0
beetl模板引擎的好玩的地方

Beetl2.x即将发布,性能,功能上已经非常卓越了,这里介绍一下beetl的好玩的地方,使用者可以定制beetl很多特性 1 自定义控制语句定界符: 开发者可以根据自己喜爱定义<% %>作为控制语句定界...

闲大赋
2014/02/14
778
1
jfinal-admin 3.2 发布,beetl 模板升级到 2.7.14

jfinal-admin 3.2 版本正式发布啦。 基于JFinal的后台管理系统,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap框架。 演示地址 http://jad.yxyun...

IT小香猪
2018/04/19
1K
6
jfinal-admin 3.3 发布,Bug 修复更新

jfinal-admin 3.3 版本正式发布啦。该版本主要进行了一些 Bug 修复,主要更新内容如下: 1、登录加密算法更新,修复DES秘钥初始化的bug; 2、任务管理模块更新,修复任务调度配置时执行类参数...

IT小香猪
2018/07/13
1K
7

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部