[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 安全子站 > 评论分析

巧用HTML Purifier抵御恶意代码

作者: 落英缤纷,  出处:51cto, 责任编辑: 郭秋爽, 
2008-07-18 09:27
  如何保障HTML代码输入时的安全性和合法性是避免安全问题的关键步骤。今天笔者就与各位一起看一个可以帮你防止不良代码的好工具HTML Purifier,我们权且叫它HTML清洁器。

  任何安全风险都需要我们在设计时就加以重视和避免。对于网站的建设来说更是这样。大量的网站仍不能完全脱离HTML代码,如何保障这种代码输入时的安全性和合法性是避免安全问题的关键步骤。今天笔者就与各位一起看一个可以帮助你防止不良代码的好工具HTML Purifier,我们权且叫它HTML清洁器。

  功能与特性

  HTML Purifier可以帮助用户保障HTML的合法性,它可以使你确认HTML是否包含跨站脚本攻击企图或其它的恶意攻击。通过该软件你准许用户粘贴一些HTML内容,却不会让其插入恶意代码,而这种代码可在查看这些HTML的任何人的浏览器中运行。我们可以通过CodeIgniter、 Drupal、 MODx、 Phorum、 Joomla! 、WordPress等来使用该软件。

  HTML Purifier利用一个白名单列表来实现安全,要求一个合法文档的所有部分都必须明确地获得准许,而不是象一个黑名单列表那样查找已知的恶意HTML代码。冒烟测试(smoke testing)页明确地列示了有哪些东西被允许,其中还表明了相关的场合。HTML Purifier的一个重要目标是它应当完全理解合法的HTML是什么样的,哪些元素可被嵌套在其它元素中,对于一个特定元素的相关HTML属性来说,哪些是合法的内容。另外,该软件还包括了对CSS的支持,与其它的HTML验证工具相比,该软件有其自身的优越性。

  不过,用户(就是你,呵呵)需要注意,并不存在Ubuntu、Fedora、openSUSE等Linux系统的HTML Purifier软件包。该软件可利用pear来安装,而且安装速度很快,这样我们就可以使用pear的升级来轻易地升级到最新的版本。Pear使得将HTML Purifier包含到用户的脚本中更加容易了,这是因为用户不必在其脚本中指明任何路径。

  安装与使用

  要通过pear安装HTML Purifier,用户必须首先安装php-pear软件包,然后利用pear命令安装HTML Purifier。下面的命令将把HTML Purifier安装到/usr/share/pear/HTMLPurifier中。

pear channel-discover htmlpurifier.org
pear install hp/HTMLPurifier

  对笔者而言,在此阶段利用HTML Purifier会导致一个Apache的日志文件错误,即关于Cache.SerializerPath路径并不存在。该软件会尽量将下面的目录用作一个高速缓冲内容的可写入路径:/usr/share/pear/HTMLPurifier/DefinitionCache/Serializer。这个高速缓冲存储器可被关闭,这在INSTALL安装中有详细描述,否则你可在/usr中创建目录,/usr正是 HTML Purifier 要用作一个内容易丢失的缓存的位置。第三种选择显示在下面:

# mkdir -p /var/cache/HTMLPurifier
# chown apache /var/cache/HTMLPurifier
# chmod o-rwx /var/cache/HTMLPurifier
# ls -ld /var/cache/HTMLPurifier
drwxr-x--- 2 apache root 4096 2008-06-25 14:25 /var/cache/HTMLPurifier

  不幸的是,SerializerPath的默认路径被编码后放在了HTMLPurifier/ConfigSchema/schema.ser中,这是一个长度定界的文件,不太容易编辑。最好的方案是使用PHP代码中的一个配置对象来改变路径,或采用更好的方法,即用户的PHP函数,它可以为网站建立配置对象。

  下面是一个简单的index.php文件,它使用了HTML Purifier来清理HTML内容,由同样的HTML网页上的一个表单来提交。注意,对htmlspecialchars的调用并不是为了安全性,而仅仅是为了支持由用户输入的HTML文本,目的是为了在pre元素内的完全可见。

# cd /var/www/html # mkdir HTMLPurifierTest # chown ben.apache
HTMLPurifierTest # chmod +s HTMLPurifierTest # su -l ben $ cd
/var/www/html $ vi index.php set('Core', 'Encoding', 'ISO-8859-1'); $config->set
('HTML', 'TidyLevel', 'heavy' ); $config->set('Cache', '
SerializerPath', '/var/cache/HTMLPurifier' ); $ purifier =
new HTMLPurifier($config); ?> < html> Enter your
nastiest HTML below! < /p > < form name="myfrom" action="index.php"
> < input type='text' name='query'>< /form>

  如果你希望明确地限制一个用户可以输入的HTML元素,可以使用ForbiddenElements配置指令,如下所示。本例将从所输入的HTML元素中剥离出任何大写的、斜体或预定格式的标签。你还可以采用另外一种方法,通过白名单利用AllowedElements明确地指明哪些元素是合法的。

$config->set('HTML', 'ForbiddenElements', 'b,i,pre');

  HTML Purifier包括了对过滤和管理URI(统一资源标识符)的支持,既可在主要的验证之前,也可在其后进行。能够在验证HTML输入之前进行过滤准许用户改变URI。

  有一种URI过滤器称为主机黑名单,它准许你阻止给定的主机名。不过,你一定要小心使用主机黑名单,因为你的黑名单中的任何东西一旦出现在URL(统一资源定位器)中,它都会被拒绝。幸运的是,主机黑名单类的代码是很短的,因此你能够轻易地定义一个类,它只为以特定后缀结尾的URL进行了测试。

  小结

  大概高速缓存目录的安装问题是一个PEAR的限制问题。至少让HTML Purifier无法正常运行同时又生成冗长的错误消息会迫使我们注意在什么地方存放易丢失的缓存文档的问题,而不仅仅是简单地使用/usr下的一个路径。

  HTML Purifier为防止人们输入错误或恶意HTML代码起到了保护作用。能够输入白名单,又能够与URI过滤功能结合使用,这就避免了一些用户输入非法数据的企图。URI过滤是一个很好的功能,如果作为管理员的你准许任何人匿名发帖子的话,它可有助于减少论坛的垃圾信息。例如,你可以强化这样一种策略:在人们匿名发帖子时,他们只能连接到你的网站,如果他们想链接到其它的网站,就需要注册。

  总之,HTML Purifier是个实用的工具,你不妨试试。

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅


    • 解析Windows密码安全问题(第三部分)评论
      在前两部分文章中,我们讨论了Windows密码政策的问题以及它是如何在Active Directory环境被控制等问题,大家应该还记得在默认情况下密码政策和相关的设置位于默认域策略中(Default Domain Policy)。另外同样探讨了可以使用哪些技术破获windows密码,以及每种攻击方式的限制问题。那么,在本文中,我们将讨论如何让windows密码变得更加安全,以及如何能够解决在前两部分文章中出现的所有问题。本文将涉及Windows2002/2003/2008Active Directory默认安装带来的可能性以及其他能够整体提高密码安全的技术。
    • IDC创新和安全白皮书:合作或竞争评论
      业务创新是业务发展战略非常重要的一部分,并而日益成为公司保持竞争优势的决定性因素。由于创新的战略重要性,导致了我们越来越关注信息安全机制在抑制甚至扼杀业务创新方面起到的作用。IDC认为公司不仅是需要找到业务创新和有可能扼杀这种创新的信息安全机制,而且需要在这两者之间找到一个简洁的平衡来满足自己的业务需求。成功的企业能够在商业竞争中占有优势,是因为他们懂得去合理的利用两者使之成为一种具有杠杆作用的机制,而其它的企业只是单单强调其中的一个。
    • 预防企业数据丢失的6种最佳实践评论
      根据“私有权清算中心”(一家非赢利性消费者信息和倡导组织)的统计,自2005年1月以来,有将近2200万条记录遭到破坏。数据失窃和丢失案件数量惊人,这不仅是因为安全入侵事件正在以惊人的速度持续增长,数据丢失引发的财产损失事件也同样在飞速增加。根据美国政府的估计,所谓的“企业数据丢失”在去年使商业界损失了近1050亿美元。根据波尼蒙研究所(Ponemon Institute)的统计,仅仅内部人士导致的数据受损一项,每年给商业界造成的损失为平均每家公司3-4百万美元。产业分析公司Gartner集团估计,恢复数据的开销可以达到每条破坏记录150美元之高——这一数字还没有包括重拾客户信任和重建品牌价值、可能的罚款以及法律诉讼代理费的资金投入。在企业数据丢失案件有增无减的同时,公司也正在不断搜集更多数据,以求优化商业流程,改善客户服务,以及提升与合作伙伴的关系。更多的数据转化为相关数据在整个企业中数量不断增多的信息系统之间更广泛的传播。其结果就是——随着公司内外越来越多的用户获得接入系统的权限,敏感数据遭到破坏的风险也在不断增大。
    • RSA白皮书:管理银行的信息风险评论
      信息是银行的基础,但直到现在,金融机构还往往满足于以业务封闭式的方式管理风险。然而,行业的压力促使银行开始对这种战略展开思考。