OWASP AntiSamy .NET
AntiSamy.NET是什么?
OWASP AntiSamy.Net项目可以有好几种定义。从技术的角度,它是一个API,用来可确保用户输入的HTML/CSS符合应用规范。换句话说,这个API可以确保用户无法在HTML中提交恶意代码,这些恶意代码通常被存储在用户输入的个人资料、评论等被服务端持久化保存的数据中。对Web应用来讲,“恶意代码”通常是指Javascript脚本。CSS样式只要在调用Javascript引擎,执行恶意脚本的时候,其CSS才被认为是恶意代码。然而,通常一些看起来“正常”的HTML和CSS也会被用于恶意的目的,所以我们也会对此予以处理。
从哲学的角度,AntiSamy.NET是不同于现代安全机制的。通常,出于安全考虑,安全机制和用户之间基本上是一种单向沟通。让攻击者明白漏洞校验的细节是不明智的,因为,这会允许攻击者学习并侦查到校验机制的薄弱环节。这种类型的信息泄露通常会造成意想不到的后果。比如一个登陆系统在提示“用户名无效”的信息时,此系统已经泄漏一个信息:此用户名确实不存在。攻击者可以使用一个字典,电话本,或者二者结合,通过不断进行登录请求验证,最终得到一个有效的用户列表。利用这些信息,攻击者可以使用暴力穷举破解,或者引发大规模的账户锁定从而造成拒绝服务攻击。
但是,这种策略在当前的情况下并不实用。普通的互联网用户基本上都不熟悉HTML和CSS,那么他们从哪儿获取自己需要的HTML表单呢?通常他们只是从其它Web页面上进行拷贝。如果验证模块简单的拒绝用户的输入,而不提供任何有价值的提示信息,这会让用户感到厌烦和沮丧。不友好的的用户体验会导致用户选择其他的网站进行相关的网络社交活动,从而离你远去。
从社会经济学角度,AntiSamy.NET是“大众利器”。一些私有公司例如Google, MySpace, eBay等等,都开发出一些专有的解决方案来应对这些(安全)问题。这造成两个问题,一个是这些专有的解决方案通常不是那么好用;另外一方面,即使它们很好用,这些公司也通常并不情愿将这些辛苦完成的解决方案免费开放给公众使用。幸好,我们无所谓。没有道理只有这些私有公司才能拥有这些功能,所以我们免费发布了AntiSamy.NET。OWASP的授权许可政策(详见OWASP网站的会员FAQ页面)允许OWASP项目在任何被批准的开源协议下发布。基于此,AntiSamy项目给予BSD协议进行发布。
如何开始使用步骤?
在项目中整合AntiSamy有四个步骤,每个步骤都有详细解释.
- 在Google Code下载AntiSamy
- 选择适合你需要的配置文件(policy files)
Antisamy-slashdot.xml
(有待增加)
- 根据你的网站的规则修改配置文件
- 在你的代码中调用Antisamy的API
下载
目前你可以使用SVN在AntiSamy .NET Google Code下载。
将来我们会在Google Code提供源代码和编译后的DLL文件
安装
首先确保所有依赖的DLL都存在,然后在你的工程中引用AntiSamy .NET的DLL就可以运行了.
现阶段只有一个依赖的dll文件,既HtmlAgilityPack.dll,如果你想进行单元测试,那么你还需要下面的dll文件
- nunit.core.dll
- nunit.core.interfaces.dll
- nunit.framework.dll
修改配置文件
大部分情况我们都使用默认配置.除非你的网站涉及到特殊的业务需求.在决定修改配置文件的时候也要考虑到修改配置文件后可能导致的攻击风险.
运行
AntiSamy.NET的使用非常简单,下面是一个带配置文件的调用AntiSamy的例子.
AntiSamy _as = new AntiSamy();
string filename = Server.MapPath("./properties/antisamy-slashdot.xml");
Policy policy = Policy.getInstance(filename);
CleanResults results = _as.scan(txtInput.Text, policy);
接下来是一个带错误信息的调用例子:
lblOutput.Text = results.getCleanHTML();
string s = "";
for (int i = 0; i < results.getErrorMessages().Count; i++)
{
s += results.getErrorMessages()[i].ToString() + "<p/>";
}
lblErrors.Text = s;
缺陷或限制
AntiSamy .NET暂时不支持CSS过滤.我们希望在接下来的开发中有望增加这一功能。采用默认的样式表,不允许并去掉样式标签,就如样式属性一样。.
更新(03/15/2009):在最新的AntiSamy .NET(r95)中已经支持CSS过滤,可以在SVN中获取最新版本.
联系我们
这里有两个方式获取AntiSamy的相关信息,邮件列表和直接联系项目主管.
- OWASP AntiSamy 邮件列表
邮件列表地址是 https://lists.owasp.org/mailman/listinfo/owasp-antisamy.该邮件列表之前并不开放,并且在1.0版本时所有档案都被清空.
欢迎之前和现在的所有用户以及”无聊的”黑客们加入到讨论中.我们将非常高兴能看到头脑风暴式的攻击场景,激烈的讨论正则匹配问题或者帮助我们完善系统.
- 发送邮件
如果需要发送公开邮件列表不支持的内容,请直发送邮件到Jerry Hoff,[jerry.hoff]at[aspectsecurity.com](将at替换为@)
3. 问题反馈
如果问题需要反馈,请访问Google Code issue tracker
项目名 |
参与人 |
完成时间 |
AntiAamy.NET |
梁兴开 |
2011.04.12 |