【问题标题】:how can I apply xss filter on output of laravel views?如何在 laravel 视图的输出上应用 xss 过滤器?
【发布时间】:2016-02-15 20:35:06
【问题描述】:

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

【问题讨论】:

  • 这里讨论了一个类似的问题。 stackoverflow.com/questions/26023823/…
  • 我都看到了,我需要一个只过滤危险代码的输出过滤器,在 laravel 模板视图引擎中是否有类似的东西,或者我应该自己实现它。
  • @MohammadRezaEsmaeilzadeh 您需要查找并使用利用白名单而非黑名单的解决方案。您还需要过滤属性,以及清理 href 以使其仅指向 http/https。还有更多,但您不想走上只过滤危险标签的道路......因为几乎任何标签都可能是危险的属性。

标签: laravel xss


【解决方案1】:

您绝对应该自己实现它。我假设您想要转义的标签可能只是 <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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2014-03-02
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多