如何对laravel视图的输出应用xss过滤器



我知道我可以使用{{{}}}从输出文本中转义所有html标签,但我只想转义不安全的标签,而不是所有标签(例如,我想在文本中使用br标签)

您肯定应该自己实现它。我假设您想要转义的标签可能只是<script><iframe>,但在我看来,完全删除该内容更合适,而不是将转义的内容无故保留在页面上。

你可以使用regex进行简单的替换,比如

$html = preg_replace("/<iframe.*?>/", "", $html);
$html = preg_replace("/<script(.*?)>(.*?)</script>/", "", $html);

然而,这被认为是的坏做法,因为不存在完美的正则表达式,因此您的安全性可能会受到破坏。

一个更好的想法是使用PHP DOMDocument Parser。你可以这样做来删除脚本标签:

$doc = new DOMDocument();
$doc->loadHTML($html);
$script_tags = $doc->getElementsByTagName('script');
for ($i = 0; $i < $script_tags->length; $i++) {
    $script_tags->item($i)->parentNode->removeChild($script_tags->item($i));
}
$clean_html = $doc->saveHTML();

最新更新