美文网首页
修复 XSS 注入漏洞 HTMLPurifier

修复 XSS 注入漏洞 HTMLPurifier

作者: 熊航 | 来源:发表于2019-05-14 10:18 被阅读0次

XSS

XSS 也称跨站脚本攻击 (Cross Site Scripting),恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页之时,嵌入其中 Web 里面的 JavaScript 代码会被执行,从而达到恶意攻击用户的目的。

两种方法可以避免 XSS 攻击

第一种,对用户提交的数据进行过滤;
第二种,Web 网页显示时对数据进行特殊处理,一般使用 htmlspecialchars() 输出。
Laravel 的 Blade 语法 {{ }} 会自动调用 PHP htmlspecialchars 函数来避免 XSS 攻击。

HTMLPurifier

PHP 一个比较合理的解决方案是 HTMLPurifier 。HTMLPurifier 本身就是一个独立的项目,运用『白名单机制』对 HTML 文本信息进行 XSS 过滤。这种过滤机制可以有效地防止各种 XSS 变种攻击。只通过我们认为安全的标签和属性,对于未知的全部过滤。

『白名单机制』指的是使用配置信息来定义『HTML 标签』、『标签属性』和『CSS 属性』数组,在执行 clean()方法时,只允许配置信息『白名单』里出现的元素通过,其他都进行过滤。
如配置信息:

'HTML.Allowed' => 'div,em,a[href|title|style],ul,ol,li,p[style],br',
'CSS.AllowedProperties'    => 'font,font-size,font-weight,font-style,font-family',

当用户提交时:

<a someproperty="somevalue" href="http://example.com" style="color:#ccc;font-size:16px">
    文章内容<script>alert('Alerted')</script>
</a>

会被解析为:

<a href="http://example.com" style="font-size:16px">
    文章内容
</a>

以下内容因为未指定会被过滤:
someproperty 未指定的 HTML 属性
color 未指定的 CSS 属性
script 未指定的 HTML 标签

HTMLPurifier for Laravel 5

安装

composer require "mews/purifier:~2.0"

配置

php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
请将配置信息替换为以下:
config/purifier.php

<?php
return [
    'encoding'      => 'UTF-8',
    'finalize'      => true,
    'cachePath'     => storage_path('app/purifier'),
    'cacheFileMode' => 0755,
    'settings'      => [
        'user_topic_body' => [
            'HTML.Doctype'             => 'XHTML 1.0 Transitional',
            'HTML.Allowed'             => 'div,b,strong,i,em,a[href|title],ul,ol,ol[start],li,p[style],br,span[style],img[width|height|alt|src],*[style|class],pre,hr,code,h2,h3,h4,h5,h6,blockquote,del,table,thead,tbody,tr,th,td',
            'CSS.AllowedProperties'    => 'font,font-size,font-weight,font-style,margin,width,height,font-family,text-decoration,padding-left,color,background-color,text-align',
            'AutoFormat.AutoParagraph' => true,
            'AutoFormat.RemoveEmpty'   => true,
        ],
    ],
];

配置里的 user_topic_body 是我们为话题内容定制的,配合 clean() 方法使用:

$topic->body = clean($topic->body, 'user_topic_body');

开始过滤

app/Observers/TopicObserver.php

<?php
namespace App\Observers;

use App\Models\Topic;

// creating, created, updating, updated, saving,
// saved,  deleting, deleted, restoring, restored

class TopicObserver
{
    public function saving(Topic $topic)
    {
        $topic->body = clean($topic->body, 'user_topic_body');

        $topic->excerpt = make_excerpt($topic->body);
    }
}

相关文章

  • 修复 XSS 注入漏洞 HTMLPurifier

    XSS XSS 也称跨站脚本攻击 (Cross Site Scripting),恶意攻击者往 Web 页面里插入恶...

  • Web 开发常见安全问题

    前端安全XSS 漏洞CSRF 漏洞 后端安全SQL 注入漏洞权限控制漏洞SESSION 与 COOKIEIP 地址...

  • 常见的WEB攻击

    XSS攻击,CSRF攻击,SQL注入攻击,文件上传漏洞,DDoS攻击,其他攻击手段 1.XSS攻击 XSS(Cro...

  • Web 开发常见安全问题

    前端安全 XSS漏洞 CSRF漏洞 后端安全 SQL 注入漏洞 所有 SQL 语句都使用参数化查询(推荐)或对参数...

  • 网站漏洞处理总结

    最近实验室网站检测出了漏洞,需要修复,以下对修复内容给做点总结 1. XSS 攻击 XSS 攻击全称跨站脚本攻击,...

  • sql注入漏洞

    扫描结果是安全公司反馈回来的,有很多安全方面的漏洞,其中有sql注入,XSS注入,宽字节跨站漏洞,Javascri...

  • 代码审计——xss漏洞

    XSS漏洞大致分为三种 反射型XSS漏洞 存储型XSS漏洞 基于DOM的XSS漏洞 反射型XSS漏洞 它通过给别人...

  • XSS注入漏洞与CSRF漏洞

    最近在笔试的时候遇到这么个问题,我这个自学前端的小白看到直接蒙了=- =,今天去网上查了查,现在把他们记录在这里,...

  • 安全性测试

    安全性测试 • 认证与授权 • Session和cookie • 文件上传漏洞 • SQL 注入 • XSS 跨站...

  • XSS AND CSRF

    XSS:(cross-site script)跨站脚本 XSS是一种网站应用程序的安全漏洞攻击。恶意用户将代码注入...

网友评论

      本文标题:修复 XSS 注入漏洞 HTMLPurifier

      本文链接:https://www.haomeiwen.com/subject/bdvjaqtx.html