我有一个网页,我意识到我用“{!!”显示所有变量。我最近发现,双括号“{{”。
是不一样的{!!不安全,因为它可以执行脚本,但有些情况我需要使用它。
如果我将此<p style="color:red;">hello<p>
存储在php变量中,然后我想显示它,我该如何安全地进行操作?我希望用户看到红色的“你好”,而不是html标签。
nl2br()
函数但是要使<br>
可见我必须使用{!! !}。我认为在这种情况下有一种安全的方法可以做到。
答案 0 :(得分:0)
这实际上是一个信任级别的问题:您信任您的用户编写部分 HTML,例如格式化,但不信任他们编写所有 HTML,例如脚本插入。
首先,您需要准确定义要允许的HTML,作为严格的白名单。请记住,您需要将属性和标记列入白名单,以便用户无法撰写<p style="text-decoration: underline;" onclick="evil();">hello<p>
。
理想情况下,当HTML输入到您的系统时,应强制执行此白名单:如果用户输入无效的HTML,则应立即将其删除,或者使用适当的消息拒绝输入。
您可以选择在检索时使用,或者甚至在模板中使用自定义函数进行显示,但这会产生您(或其他处理代码的人)忘记通过此机制传递某些内容的风险,以及显示本应受限制的HTML。