为了使用新行在Laravel刀片模板中输出文本,我使用:
{!! nl2br(e($prodData->text))!!}
当我插入数据时,我不会对数据进行整理,我只是将其修剪为只允许连续两行,如下所示:
public function setDescriptionAttribute($description)
{
$this->attributes['description'] = preg_replace('~(\R{2})\R+~', '$1', $description);
}
但现在我担心{!!nl2br(e())!!}
会导致xss注射,所以使用它是否安全?
答案 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)) !!}