【问题标题】:Using double curly brace in Laravel Collective在 Laravel Collective 中使用双花括号
【发布时间】:2016-12-12 10:46:33
【问题描述】:

我正在尝试创建创建这样的用户的表单,该表单将用于显示数据,也使用表单模型绑定:

{{ Form::open(['url' => 'admin/users/create']) }}

    <div class="form-group">
        {{ Form::label('first_name', 'First Name : ') }}
        {{ Form::text('first_name', null, ['class' => 'form-control']) }}
    </div>

    <div class="form-group">
        {{ Form::label('last_name', 'Last Name : ') }}
        {{ Form::text('last_name', null, ['class' => 'form-control']) }}
    </div>

{{ Form::close() }}

但是它显示的代码不是实际的视图,所以我在浏览器中看到了这段代码:

<form method="POST" action="http://localhost:8000/admin/users/create" accept-charset="UTF-8">

    <input name="_token" type="hidden" value="X5MA46MJctYOYeMtZF1RoQKYmWDtAbsSoxwoOA8Y">

    <label for="first_name">First Name : </label> 
    <input class="form-control" name="first_name" type="text" id="first_name">

    <label for="last_name">Last Name : </label> 
    <input class="form-control" name="last_name" type="text" id="last_name">

</form>

但是当尝试使用 {!! !!} 作为左括号和右括号时,代码可以正常工作并显示实际视图。

我仍然不明白为什么我不能使用laravel-collective{{ }} 用作我的支架,如果你看到这个Project 它工作正常。

也有点害怕XSS攻击就像laravel documentationDisplaying Unescaped Data部分说的:

注意:在回显用户提供的内容时要非常小心 您的应用程序。始终使用双花括号语法 转义内容中的任何 HTML 实体。

对此有什么有用的解释吗?谢谢你

注意:我使用的是 Laravel 版本 5.1.40 (LTS)

【问题讨论】:

    标签: php laravel-5 laravel-blade laravelcollective


    【解决方案1】:

    因为 {{ }} 用于转义 HTML 实体,以防止对从服务器/数据库显示的输入进行 XSS 攻击。

    因此,如果有人在您的数据库中插入了恶意代码,那么用户将无法执行该代码,而只是在屏幕上打印出来。像这样

    $dbValue = "<script> Some evil code </script>";
    
    {{ $dbValue }}
    

    会这样输出

    <script> Some evil code </script>
    

    因为 Laravel Collective HTML FORM 正在生成 HTML 供你显示,所以你必须使用 {!! !!} 以防止逃逸。

    {!! "<b>Bold Text</b>" !!}
    

    然后它会输出这个

    粗体字

    生成 HTML 没问题,但您必须小心将值发送到服务器并显示给用户。在那里你总是需要用 {{ }}

    转义你的数据

    【讨论】:

    • 使用表单模型绑定显示数据怎么样?我将不得不使用表单来显示数据以进行编辑。
    • 它会自动为您的表单转义您的模型数据值,因此无需担心。
    • @GujaratSantana 您不接受答案有什么原因吗?
    • 忘了问,为什么我不能使用{{ }} 而不是{!! !!} 我看到其他项目他们可以使用{{ }}
    • 因为 laravel HTML 包必须为你生成 HTML 才能在你的视图中输出,所以如果你使用 {{ }} 那么这些大括号将转义生成的 HTML 表单,你会看到代码你的页面而不是表单
    猜你喜欢
    • 2019-07-24
    • 2022-11-10
    • 2011-01-12
    • 2012-06-05
    • 2015-02-24
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多