Laravel在刀片

时间:2018-05-09 09:58:50

标签: laravel xss

为了使用新行在Laravel刀片模板中输出文本,我使用:

{!! nl2br(e($prodData->text))!!}

当我插入数据时,我不会对数据进行整理,我只是将其修剪为只允许连续两行,如下所示:

public function setDescriptionAttribute($description)
  {
      $this->attributes['description'] = preg_replace('~(\R{2})\R+~', '$1', $description);
  }

但现在我担心{!!nl2br(e())!!}会导致xss注射,所以使用它是否安全?

3 个答案:

答案 0 :(得分:3)

如果e()是安全的,则{!! nl2br(e()) !!}是安全的("safety" vs. "security")。

{{ $foo }}相当于{!! e($foo) !!}。所以{!! nl2br(e()) !!}是适合您情况的正确方法。

关于@Loek的回答:e()取决于htmlspecialchars()的安全性。如果htmlspecialchars()存在缺陷,基本上每个PHP网站都会出现巨大的问题。

答案 1 :(得分:0)

根据定义,

处理用户输入时只有一条规则:从不信任用户输入。

当然,由您来评估风险,但根据定义,它并不安全。在2017年版本的OWASP十大网络漏洞中,您正在做的事情排在第7位:https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS)

答案 2 :(得分:0)

您可以根据需要使用此代码。 Laravel 5.4 +版本

{!! nl2br(e($onlineSetting->instruction)) !!}