Laravel {{}}和{!! !!}有没有一种安全的方式来显示HTML?

时间:2018-02-06 08:20:37

标签: php html security laravel-5.2 html-entities

我有一个网页,我意识到我用“{!!”显示所有变量。我最近发现,双括号“{{”。

是不一样的

{!!不安全,因为它可以执行脚本,但有些情况我需要使用它。

如果我将此<p style="color:red;">hello<p>存储在php变量中,然后我想显示它,我该如何安全地进行操作?我希望用户看到红色的“你好”,而不是html标签。

编辑:你在评论中说我用户不应该写html。好的,但是如果用户在textarea上书写并且他引入了新行或回车,我怎么能在以后显示它们?我可以使用php的nl2br()函数但是要使<br>可见我必须使用{!! !}。我认为在这种情况下有一种安全的方法可以做到。

1 个答案:

答案 0 :(得分:0)

这实际上是一个信任级别的问题:您信任您的用户编写部分 HTML,例如格式化,但不信任他们编写所有 HTML,例如脚本插入。

首先,您需要准确定义要允许的HTML,作为严格的白名单。请记住,您需要将属性和标记列入白名单,以便用户无法撰写<p style="text-decoration: underline;" onclick="evil();">hello<p>

理想情况下,当HTML输入到您的系统时,应强制执行此白名单:如果用户输入无效的HTML,则应立即将其删除,或者使用适当的消息拒绝输入。

您可以选择在检索时使用,或者甚至在模板中使用自定义函数进行显示,但这会产生您(或其他处理代码的人)忘记通过此机制传递某些内容的风险,以及显示本应受限制的HTML。