欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

OWASP开源工具antisamy的使用详解

来源:本站整理 作者:niro001 时间:2017-05-10 TAG: 我要投稿

1 前言
Antisamy是OWASP(open web application security project)的一个开源项目,其能够对用户输入的html/css/javascript 脚本进行过滤,确保输入满足规范,无法提交恶意脚本。Antisamy被应用在web服务中对存储型和反射性的xss防御,尤其是在存在富文本输入的场景,antisamy能够很好的解决用户输入体验和安全要求之间的冲突。
Antisamy的对包含非法字符的用户输入的过滤依赖于策略文件,策略文件规定了antisamy对各个标签、属性的处理方法。策略文件定义的严格与否,决定了antisamy对xss漏洞的防御效果。
OWASP中antisamy有java和.net两个项目,这篇文档中仅对java项目进行介绍。从安装、使用及策略文件的定制几个方面讲解如何将antisamy应用到实际项目当中。
2 工具安装
 Antisamy的官方下载路径:++https://code.google.com/archive/p/owaspantisamy/downloads++。下载列表中包含antisamy的jar包,同时也包含了几个常用的策略文件。官方下载的链接需要翻墙,为方便使用,将最新版本的antisamy和策略文件放到文档的附件中(见附件1)。
Antisamy直接导入到java的工程即可,但是其运行依赖另外三个库:
xercesImpl.jar    http://xerces.apache.org/mirrors.cgi#binary
batik.jar              http://xmlgraphics.apache.org/batik/download.cgi
nekohtml.jar       http://sourceforge.net/projects/nekohtml/
可以通过链接下载,也可以从marven中直接下载。测试过程中使用的是从marven中下载,使用的版本信息如下:
  
 
 
在导入完成后,在java工程中新建一个类,输入如下代码进行测试,确认安装是否正确。
public class AntiSamyApplication {
    public static void main(String[] args)
    {
        AntiSamy as = new AntiSamy();
        try{
            Policy policy = Policy.getInstance("\\antisamy\\antisamy-tinymce-1.4.4.xml");
            CleanResults cr = as.scan("wwwwwalert(1)", policy);
            System.out.print(cr.getCleanHTML());
        }
        catch(Exception ex) {
        } ;
    }
}
如果输出结果如下结果,说明安装正确,可以正常使用antisamy了。
"C:\Program Files (x86)\Java\jdk1.8.0_121\bin\java"
  wwwwwdddd
  Process finished with exit code 0
3 使用方法
Antisamy存在两种使用方法,一种是从系统层面,重写request处理相关的功能函数,对用户输入的每一个参数均作过滤验证;另外一种是仅对富文本使用过滤验证; 
4 策略文件
4.1 策略文件结构
一个简易的Antisamy的策略文件主体结构如所示:
 

 
Antisamy的策略文件为xml格式的,除去xml文件头外,可以为7个部分,下面对各个部分的功能做简单的介绍。 
directives>
    directive name="omitXmlDeclaration" value="true" />
    directive name="omitDoctypeDeclaration" value="true" />
directives>
对应上图中标注为1的部分,主要为全局性配置,对antisamy的过滤验证规则、输入及输出的格式进行全局性的控制。具体字段的意义在后面继续文档中详细介绍。 
common-regexps>
    regexp name="htmlTitle" value="[a-zA-Z0-9\s\-_',:\[\]!\./\\\(\)&]*" />
    regexp name="onsiteURL" value="([\p{L}\p{N}\p{Zs}/\.\?=&\-~])+" />
    regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[A-Za-z0-9]+[~a-zA-Z0-9-_\.@\#\$%&;:,\?=/\+!\(\)]*(\s)*" />
common-regexps>
对应上图中标注为2的部分,将规则文件中需要使用到的正则表达式相同的部分归总到这,会在后续中需要正则的时候通过name直接引用;
common-attributes>
    attribute name="title" description="The 'title' attribute provides text that shows up in a 'tooltip' when a user hovers their mouse over the element">
        regexp-list>
        regexp name="htmlTitle" />
        regexp-list>
    attribute>
common-attributes>
对应上图中标注为3的部分,这部分定义了通用的属性需要满足的输入规则,其中包括了标签和css的属性;在后续的tag和css的处理规则中会引用到上述定义的属性。
global-tag-attributes>

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载