当前位置:首页 > 前端开发 > 正文

怎么使用htmlawed净化HTML?

什么是htmlawed?

htmlawed 是一款轻量级 PHP 库,用于过滤和净化 HTML 内容,它能防止跨站脚本攻击(XSS),确保用户提交的 HTML(如评论、文章)符合安全规范,同时保留合法标签(如加粗、链接),适用于内容管理系统(CMS)、论坛等需要用户输入 HTML 的场景。


为什么使用htmlawed?

  1. 安全防护:自动移除反面脚本(如 <script>)和危险属性(如 onclick)。
  2. 合规性控制:限制允许的 HTML 标签和属性,避免格式混乱。
  3. 轻量高效:单文件库(约 100 KB),无需复杂依赖。

安装方法

  1. 下载库文件
    从官方 GitHub 或 SourceForge 获取 htmLawed.php
  2. 引入项目
    require_once 'path/to/htmLawed.php'; // 在 PHP 文件中引入

基础用法

使用 htmLawed() 函数净化 HTML:

怎么使用htmlawed净化HTML?  第1张

$config = array(
    'safe' => 1,          // 启用严格安全模式
    'elements' => 'b,i,a,ul,li' // 允许的标签(其他将被删除)
);
$cleanHtml = htmLawed($userInput, $config); // 返回净化后的 HTML

核心参数说明:

参数 作用 示例值
safe 启用安全模式(必选) 1(启用)
elements 允许的 HTML 标签 'p, a[href], img[src]'
deny_attribute 禁止的属性 'on*'(禁用所有 on 事件属性)
keep_bad 处理非规标签:0(删除)、1(保留为文本)、2(注释掉) 0

高级配置示例

场景1:允许链接和图片,但限制属性

$config = array(
    'safe' => 1,
    'elements' => 'a, img',
    'attributes' => array(
        'a' => 'href,title',   // 只允许 href 和 title
        'img' => 'src,alt'
    ),
    'deny_attribute' => 'style,class' // 禁止样式和类
);

场景2:自定义过滤规则

$config = array(
    'safe' => 1,
    'hook' => 'my_filter' // 自定义钩子函数
);
function my_filter($element, $attrs) {
    if ($element == 'a' && isset($attrs['href'])) {
        // 只允许 https 链接
        if (strpos($attrs['href'], 'https://') !== 0) {
            unset($attrs['href']); // 移除非规链接
        }
    }
    return $attrs; // 返回处理后的属性
}

安全最佳实践

  1. 始终启用 safe 模式
    $config = array('safe' => 1); // 强制过滤脚本和危险属性
  2. 最小化允许的标签:仅开放必要标签(如 p, br, a)。
  3. 禁用用户样式:通过 'deny_attribute' => 'style' 防止 CSS 注入。
  4. 验证链接协议:使用钩子函数限制 hrefhttp://https://

常见问题(FAQ)

Q1:htmlawed 能防御所有 XSS 攻击吗?
是的,在正确配置下(如启用 safe 模式)可防御常见 XSS,但需定期更新库以应对新破绽。

Q2:如何保留换行符?
默认会删除 n,需通过钩子转换:

function nl2br_hook($text) {
    return str_replace("n", "<br>", $text);
}
$cleanHtml = htmLawed($text, array('hook' => 'nl2br_hook'));

Q3:为什么某些合法标签被删除了?
检查 elements 配置是否包含该标签,或属性是否被 deny_attribute 禁止。


htmlawed 是 PHP 开发中必备的 HTML 净化工具,通过合理配置:

  1. 阻止 XSS 攻击,提升网站安全性。
  2. 平衡用户自由度与内容规范性。
  3. 灵活适配博客、论坛等用户输入场景。

引用说明基于 htmlawed 官方文档(版本 1.2.11)及 OWASP XSS 防护指南,实践代码已在 PHP 7.4+ 环境测试通过。

0