如何保护所见即所得的编辑器免受 XSS 攻击?

How to protect a WYSIWYG editor from XSS attacks?

我正在使用 Summernote 所见即所得编辑器(如下所示),发现它使用 HTML 标签来格式化文本。

<textarea name="body" id="editor" value="{{old('body')}}" rows="10" required></textarea>

如何保护我的应用程序免受 XSS 攻击?我将输入存储为纯文本,并使用以下方式输出:{!! $body !!}.

是否可以针对易受攻击的输入过滤 textarea,例如:<script>alert("boom")</script>

默认情况下,Laravel 不提供任何从给定输入中删除某些标签的机制,因此您需要使用像 Purifier.

这样的第三方包

正在安装净化器

如下所示,使用Composer即可简单地安装Purifier。

composer require mews/purifier

配置

要自定义 Purifier 的默认设置,请发布配置文件 (config/purifier.php)。

php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"

现在,导航到 config/purifier.php 并根据需要调整 HTML.Allowed 条目。请注意,所有未在此条目中列出的标签都将通过 clean() 方法删除。

可以找到详尽的配置选项参考 here


例子

clean("<p>Good</p> <script>alert('Bad')</script>")

Output: <p>Good</p>