1

我从 L5.0 开始运行此代码。随着对 L5.3.30 + 依赖项的最新更新,它似乎被破坏了。也许我从一开始就做错了什么?

这是简化的代码:

    {!! Form::select('currency', ['USD'=>'USD: *escape code here*'], 
        null, ['class'=>'form-control', "required", 'id'=>'currency']) !!}

在过去的几年里,这段代码返回了一个带有如下文本的选择框:“USD: $”

在 composer 更新到 L5.3.30 之后,在所有服务器(test、dev、prod)上,它现在返回 html 符号:“USD: escape code here

我暂时(并成功)使用以下方法修补了这个:

 <select name = 'currency' id="currency" required class="form-control">
       @foreach (\Helper::currency() as $k=>$v)
                  <option  value="{{$k}}">{!! $v !!}</option>
       @endforeach
 </select>

上面的代码在 $v var 中有货币的转义码,并在选择框中正确显示。

请帮忙 - 这打破了我的应用程序上的很多表格。

谢谢你。

编辑:我仍然可以使用 {!! 正确显示未转义的文本 !!} 其他地方。它似乎只影响 Form::select() 项目。因此,我开始认为这不是 Laravel 的刀片逃生问题,而是最新版本的 Laravel 集体表单功能问题

解决方案:我向 Laravel Collective 开发团队记录了这一点,但这显然没有被回滚。有关最新信息,请参阅https://github.com/LaravelCollective/html/issues/296

4

4 回答 4

2

您可以通过将 Laravelcollective html 包降级到版本 5.3.0(从当前版本的 5.3.1 降级)来“修复”它。只需编辑 composer.json “require”

"laravelcollective/html": "5.3.*",

有了这个:

"laravelcollective/html": "5.3.0",

缺点是您将使用旧版本,它可能有一些其他问题已在 5.3.1 中修复,但我没有任何具体信息。

于 2017-02-03T16:10:16.790 回答
0

是的,这是 Laravel 5.0 的新语法。只需切换到{!!!} 足以修复使用表单元素。

https://laravel.com/docs/5.0/upgrade

刀片标签更改

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

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

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

这不应该轻易完成,并且可能会使您的应用程序更容易受到 XSS 攻击。此外,带有 {{-- 的评论将不再有效。

于 2017-02-02T17:20:45.370 回答
0

在这个问题https://github.com/LaravelCollective/html/issues/296和这个提交https://github.com/LaravelCollective/html/pull/297/files?diff=split之后,

我将第 683 行(“$this->html->escapeAll()”更改为“e()”)

return $this->toHtmlString('<optgroup label="' . $this->html->escapeAll($label) . '">' . implode('', $html) . '</optgroup>');

return $this->toHtmlString('<optgroup label="' . e($label) . '">' . implode('', $html) . '</optgroup>');

在发布最新版本之前,它对我有用。

于 2017-04-19T09:09:30.507 回答
-1

而是使用

{!! your code !!}

尝试使用

{{ your code }}

{!! !!}用于显示未转义的数据。从文档

显示未转义的数据

默认情况下,Blade {{ }} 语句会通过 PHP 的 htmlentities 函数自动发送,以防止 XSS 攻击。如果您不希望您的数据被转义,您可以使用以下语法:

你好, {!!$名称!!}。

在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,始终使用转义的双花括号语法来防止 XSS 攻击。

于 2017-02-02T17:09:07.457 回答