在Laravel Collective中使用双花括号

时间:2016-08-05 23:29:13

标签: php laravel-5 laravel-blade laravelcollective

我尝试创建用于创建此类用户的表单,此表单也将用于使用表单模型绑定显示数据:

{{ 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 documentation显示非转义数据部分所说的那样:

  

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

对此有何有用的解释?谢谢

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

1 个答案:

答案 0 :(得分: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,它很好但是您要小心将您的值发送到您的服务器并显示给用户。在那里,您始终必须使用{{}}

来逃避您的数据