写点什么

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

  • 2007-12-05
  • 本文字数:1256 字

    阅读完需:约 4 分钟

跨站点脚本(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.*;<p>Policy policy = new Policy(POLICY_FILE_LOCATION);</p><br></br>AntiSamy as = new AntiSamy();<br></br>CleanResults cr = as.scan(dirtyInput, policy);<br></br>MyUserDAO.storeUserProfile(cr.getCleanHTML()); // some custom function<br></br>``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

2007-12-05 18:491571
用户头像

发布了 47 篇内容, 共 10.5 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

PC五年,华为如水

脑极体

论如何快速吃透算法?186道高阶算法题+学习资料程序员面试必备

比伯

Java 编程 架构 面试 程序人生

第七.产品规划与功能规划

让我思考一会儿

区块链数字版权管理,区块链赋能知识产权保护

13530558032

您的客户管理决策是否低于10毫秒?

VoltDB

5G 物联网 解决方案 电信

面试官:啥?SynchronousQueue是钟点房?

四猿外

Java 并发编程 高并发 并发 SynchronousQueue

阿里二面:什么是mmap?

艾小仙

uni-app跨端开发H5、小程序、IOS、Android(一):太强了,一次性搞定全端开发

黑马腾云

微信小程序 uni-app 大前端 uniapp 3月日更

Timewait是什么

我是程序员小贱

3月日更

五个问题,三大策略,手把手教你定制App性能监控方案

监控 应用性能 监控工具 告警设置 质量监控

人脸识别无间道

脑极体

私藏干货 | 实现分布式锁的三种方案对比

架构精进之路

分布式锁 3月日更

云原生时代下,容器安全的“四个挑战”和“两个关键”

阿里巴巴云原生

容器 云原生 k8s 安全 监控

对htmlMeta的实例详解

佰草

html5

吉他扒谱该怎么做?分享一款超好用的扒谱工具!

奈奈的杂社

Kubectl Plugin 推荐(三)| 插件开发篇

郭旭东

Kubernetes kubectl kubectl plugin

网易云音乐:基于分布式图学习PGL的推荐系统优化之路

百度开发者中心

Kubernetes入门——Kubernetes工作原理及使用

百度开发者中心

#Kubernetes# #技术课程#

校招开始,你做好【终身成长】的准备了吗?

闲鱼技术

区块链数字版权管理,区块链赋能知识产权保护

13530558032

Kyuubi: 网易数帆开源的企业级数据湖探索平台(架构篇)

网易数帆

大数据 spark 开源 Kyuubi

Java程序员面试15家公司收到15份offer,月薪35K全靠这Java面试小抄(2021版)开源分享

Java 程序员 面试

在vscode中go编码发生的问题整理

happlyfox

学习 vscode 28天写作 3月日更 Go 语言

区块链电子证照应用赋能政府服务

13530558032

Kubernetes入门——深入浅出讲Docker

百度开发者中心

Docker Kubernetes 云原生

微服务的下一步,离不开服务网格

xcbeyond

微服务 Service Mesh 服务网格 3月日更

Java的“泛型”特性,你以为自己会了?(万字长文)

比伯

Java 编程 程序员 架构 计算机

思维转换 - 更好的认识世界

石云升

程序员 思维模型 28天写作 3月日更

OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器

阿里巴巴云原生

容器 微服务 云原生 k8s 应用服务中间件

NAC公链——Nirvana NA公链白皮书

区块链第一资讯

挖矿 区块链+

阿里P9春招特此分享:Java核心开发成长手册(2021版)涵盖所有p5-p8技术栈

比伯

Java 编程 架构 面试 程序人生

AntiSamy 1.0 发布:保护Web应用免受恶意HTML和CSS攻击_Java_Gavin Terrill_InfoQ精选文章