如何在laravel视图的输出上应用xss过滤器?

时间:2015-11-14 08:44:33

标签: laravel xss

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

1 个答案:

答案 0 :(得分:0)

你一定要自己实施。我假设您想要转义的代码可能只是<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();