【问题标题】:Is this Blade sanitation working correctly (double vs triple curly braces)?这种刀片卫生是否正常工作(双花括号与三花括号)?
【发布时间】:2015-04-14 18:00:00
【问题描述】:

抱歉,这很可能是我自己的误解,而不是实际问题。我对 Laravel 和 Blade 模板还很陌生,我正在尝试输出一些取自 Input::get 的字段。但是,当我通过双花括号和三花括号输出字段时,输出之间似乎没有区别。

这是我观点的摘录:

@ $data = Input::only('name', 'date');

{{ "Unfiltered input: ".$data['name'] }}

<br />

{{{ "Filtered input: ".$data['name'] }}}

但是,当我提供带有特殊字符或代码的输入并查看呈现页面的源时,我看到为两者呈现的相同的、未过滤的输入。

根据Laravel documentation,我想在输出到视图时严格使用{{{ }}},但我认为它实际上并没有被“转义或净化”。我还没开始设置Validation,我认为这是安全和卫生的主要冲击,对吗?但是现在只关注这个,我是否误解了三重花括号应该做什么?还是他们在幕后工作而我只是没有看到最终结果?在输出这样的用户输入时,我还应该做些什么(除了设置验证层)吗?

【问题讨论】:

  • 您是对的,在您将数据放入数据库之前,所有的清洁工作都会发生。为了让您看到差异,请将 HTML 放入获取数据中,您将看到输出中的差异。 {{ }} 将解析 HTML,{{{ }}} 将转义它,这意味着您将获得它的字符串版本。
  • 啊。我知道了。这样就搞清楚了。非常感谢。

标签: php laravel filter blade


【解决方案1】:

Laravel 4

双花括号和三花括号之间的唯一区别是三花括号通过e() 辅助函数运行值,这只是PHP htmlentities 函数的快捷方式。

{{ "Unfiltered input: ".$data['name'] }}
{{{ "Filtered input: ".$data['name'] }}}

编译成:

<?php echo "Unfiltered input: ".$data['name']; ?>
<?php echo e("Filtered input: ".$data['name']); ?>

但是,所有这些都发生在输出上。它与净化输入没有任何关系。

Laravel 5

在 Laravel 5 中,Blade 语法已更改,双花括号 ({{ }}) 将转义输出,而新的花括号双感叹号语法 ({!! !!}) 不会转义输出。

所以,

{{ "Filtered input: ".$data['name'] }}
{!! "Unfiltered input: ".$data['name'] !!}

编译成:

<?php echo e("Filtered input: ".$data['name']); ?>
<?php echo "Unfiltered input: ".$data['name']; ?>

【讨论】:

    【解决方案2】:

    除了公认的答案,值得一提的是,从 Laravel 5 开始,{{ }}{{{ }}} 的工作方式相同

    https://laravel.com/docs/5.2/upgrade#upgrade-5.0

    直接引用:

    默认情况下,为了更好的安全性,Laravel 5.0 会转义所有输出 {{ }}{{{ }}} Blade 指令。一个新的{!! !!} 引入了指令来显示原始的、未转义的输出。最安全的 升级应用程序时的选项是只使用新的{!! !!} 当您确定显示原始输出是安全的时使用指令。

    但是,如果您必须使用旧的 Blade 语法,请添加以下行 在AppServiceProvider@register的底部:

    \Blade::setRawTags('{{', '}}'); \Blade::setContentTags('{{{', '}}}'); \Blade::setEscapedContentTags('{{{', '}}}');

    不应该这样做 轻而易举,并可能使您的应用程序更容易受到 XSS 的攻击 漏洞利用。此外,{{-- 的 cmets 将不再工作。

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2021-01-11
      • 2017-02-13
      相关资源
      最近更新 更多