masterro/laravel-xss-filter

过滤用户输入以防止XSS攻击,但不影响其他HTML

v1.7.0 2024-03-03 23:57 UTC

This package is auto-updated.

Last update: 2024-09-22 15:21:14 UTC


README

Latest Stable Version Total Downloads Build Status License

StandWithUkraine

Laravel XSS过滤器/清理器

配置一次,忘记XSS攻击!

Laravel 5.4+ 中间件,用于过滤用户输入,防止XSS和iframe以及其他嵌入元素。

它不会删除HTML,只会转义脚本标签和嵌入元素。

然而,默认情况下,它会删除行内事件监听器,例如onclick。也可以选择转义(在xss-filter.php配置文件中将escape_inline_listeners设置为true)。

例如

<html>
<head>
    <script src="app.js"></script>
    <script>window.init()</script> 
    <meta name="test" />
    <script>
    let Iframe = new Iframe('#iframe');
    </script>
<head>
<body>
    <div class="hover" onhover="show()" data-a="b"><p onclick="click"><span class="span" ondblclick="hide()"></span>Aawfawfaw f awf aw  </p></div>
    <iframe id="iframe">Not supported!</iframe>
</body>
</html>

将转换为

<html>
<head>
&lt;script src=&quot;app.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;window.init()&lt;/script&gt; 
<meta name="test" />
&lt;script&gt;
let Iframe = new Iframe(&#039;#iframe&#039;);
&lt;/script&gt;
<head>
<body>
<div class="hover"  data-a="b"><p ><span class="span" ></span>Aawfawfaw f awf aw  </p></div>
&lt;iframe id=&quot;iframe&quot;&gt;Not supported!&lt;/iframe&gt;
</body>
</html>

这允许根据用户输入在视图中渲染HTML,而不必担心XSS攻击和嵌入元素。

安装

步骤1:Composer

从命令行

composer require masterro/laravel-xss-filter

步骤2:注册服务提供者和外观(可选)(适用于Laravel 5.4)

对于您的Laravel应用程序,打开config/app.php并在providers数组中追加

MasterRO\LaravelXSSFilter\XSSFilterServiceProvider::class

aliases数组中追加

'XSSCleaner' => MasterRO\LaravelXSSFilter\XSSCleanerFacade::class

步骤3:发布配置(可选)

从命令行

php artisan vendor:publish --provider="MasterRO\LaravelXSSFilter\XSSFilterServiceProvider"

步骤4:中间件

您可以将\MasterRO\LaravelXSSFilter\FilterXSS::class注册为全局中间件栈、分组中间件栈或特定路由的过滤。

如果您需要帮助,请参阅Laravel的中间件文档

使用方法

添加中间件后,每个请求都将被过滤。

如果您需要指定不应过滤的属性,请将它们添加到xss-filter.except配置。默认情况下,过滤器不包括passwordpassword_confirmation字段。

如果您想在其他地方(例如控制器)清理一些值,可以使用XSSCleaner外观。

$clean = XSSCleaner::clean($string);

运行时配置

XSSCleaner::config()
    ->allowElement('iframe')
    ->allowMediaHosts(['youtube.com'])
    ->blockElement('a');
    
$clean = XSSCleaner::clean($string);

如果您能星标这个项目,我将不胜感激:)