【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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:491497
用户头像

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

关注

评论

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

3 款非常实用的 Node.js 版本管理工具

pingan8787

JavaScript node.js 前端

生于云、长于云,RocketMQ 5.0 再出发

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列

「控制反转」和「依赖倒置」,傻傻分不清楚?

蝉沐风

ioc 依赖倒置原则 DIP DI 控制反转

C++对象模型和this指针实例分析(二)

CtrlX

c++ 后端 面向对象思想 热门活动 8月月更

部署spark2.2集群(standalone模式)

程序员欣宸

spark 8月月更

产品经理必备的19类工具网站

PingCode

面试突击72:输入URL之后会执行什么流程?

王磊

Java 面试

基于消息中间件开发的优点

阿泽🧸

消息中间件 8月月更

高层次综合(HLS)

贾献华

8月月更

用户权限-Linux系统ACL控制

Albert Edison

Linux centos 运维 服务器 8月月更

MPLS网络向SRv6网络演进

穿过生命散发芬芳

8月月更 SRv6

梦回战国,领略两千多年前公孙龙如何将面向对象运用得炉火纯青

迷彩

Java 面向对象 签约计划第三季 8月月更 面向过程编程

项目管理流程及各环节要点

PingCode

测试也应该具备的项目管理能力

老张

项目管理 质量保障

阿里云云原生加速器企业硬之城携手阿里云 Serverless 应用引擎(SAE)打造低代码平台

阿里巴巴云原生

阿里云 Serverless 云原生 合作伙伴

国内最主流的5大项目工时管理系统

PingCode

类似Bugfree的9大在线缺陷管理软件

PingCode

缺陷管理 bug管理

Redis 定长队列的探索和实践

vivo互联网技术

redis 数据结构 消息队列 Lua脚本

数据治理(三):数据质量管理

Lansonli

大数据 数据治理 8月月更

开源一夏|Flutter实现搜索的三种方式

坚果

开源 OpenHarmony 8月月更

语音聊天app开发——对用户更具吸引力的设计

开源直播系统源码

软件开发 语聊房 开源源码 语音直播系统 语音源码

《MySQL入门很轻松》第2章:MySQL管理工具介绍

乌龟哥哥

8月月更

2022秋招前端面试题(五)(附答案)

helloworld1024fd

前端面试题

Sass.vs.Less | 简介

Jason199

SaaS 8月月更

云原生时代下,微服务体系与 Serverless 架构的发展、治理与融合

阿里巴巴云原生

阿里云 Serverless 微服务 云原生

结合实际聊聊防反接电路(防反接电路总结)

矜辰所致

防反接电路设计 8月月更

头脑风暴:除数博弈

HelloWorld杰少

8月月更

提升领导力的有效方法

宇宙之一粟

领导力 8月月更

Shell脚本中常用命令复习

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

2022秋招前端面试题(六)(附答案)

helloworld1024fd

前端面试题

图数据科学和机器学习图数据科学GDS概览

flow

8月月更

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