AntiSamy 1.0 发布:保护Web应用免受恶意HTML和CSS攻击

跨站点脚本(Cross Site Scripting —— XSS),是允许用户提交包含HTML和CSS内容的开发者所面对的主要安全问题。 OWASP上出现了一个的叫做 "AntiSamy" 的新项目,其目标是提供一个全面的、策略驱动的API来检验和清理用户的输入,同时在过滤过程中提供用户反馈。项目的主页描述了API:

从技术上来说,AntiSamy API可以保证用户提供的HTML/CSS内容遵从一个应用的规则。另外一种说法是:AntiSamy API可以帮助你确保客户不会在他们提供的简介、评论等保存在服务器上的HTML中包含恶意代码。就Web应用而言,术语恶意代码通常仅指JavaScript。样式表仅仅在它们调用JavaScript引擎的时候才被认为是恶意的。然而,有很多时候“正常的”HTML和CSS也可以以一种恶意的方式来使用。

根据AntiSamy的领导开发者Arshan Dabirsiaghi的说法,这个API的特点是它的用户友好性:

AntiSamy的方法的独特之处在于它是建立在一个积极的安全模型之上的,不论对HTML文档的格式还是文档的内容都是如此。另外的独特之处在于它试图以合作的精神来帮助用户调整他们的输入来通过校验,不是像当代的所有其他安全机制那样把用户当作潜在的攻击者来对待。

在论文 《向检测和除去恶意代码前进》 (PDF)中,Dabirsiaghi描述了过滤过程中包括的阶段:

  1. 预处理。使用NekoHTML来执行HTML清理。
  2. 处理。Tag/CSS校验规则按照深度优先的算法应用三种处理模型——过滤,截尾和校验。过滤动作去掉不允许的标签,但是保留标签内的内容。截尾删除禁止的标签属性和标签的子节点。校验使用在策略文件中的规则来匹配标签/属性的组合,以确保只包含合法的标签。
  3. 补救。如果在处理过程中校验失败,可以与策略文件交互来决定如何处理标签和它的内容。选项包括删除标签以及它的内容,过滤掉标签而保留它的内容和从标签中删除属性。

AntiSamy的第一个版本包括一个Java的实现,随后会提供.Net和PHP的实现。

AntiSamy易于与一个Java应用集成:

import org.owasp.validator.html.*;

Policy policy = new Policy(POLICY_FILE_LOCATION);
AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, policy);
MyUserDAO.storeUserProfile(cr.getCleanHTML()); // some custom function

CleanResults类提供了访问过滤过程的有用信息的方法:

  • getErrorMessages() —— 一个字符串错误信息列表
  • getCleanHTML() —— 干净的,安全的HTML输出
  • getCleanXMLDocumentFragment() —— 反应产生的干净的,安全的XMLDocumentFragment
  • getCleanHTML()
  • getScanTime() —— 返回以秒为单位的扫描时间

AntiSamy采用BSD许可,可以在Google Code项目主页下载。

查看英文原文: AntiSamy 1.0 Released - Protecting web applications from malicious HTML and CSS 译者简介: 曹云飞,西安交通大学计算机软件硕士。现就职于 Ethos,热衷于新技术的钻研,软件架构与敏捷开发,目前从事Home Control方面的工作。参与InfoQ中文站内容建设,请邮件至 china-editorial[at]infoq.com。

你可能感兴趣的:(AntiSamy 1.0 发布:保护Web应用免受恶意HTML和CSS攻击)