1

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

{{ 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{{ }}作为我的支架,如果你看到这个 项目它工作正常。

也有点害怕 XSS 攻击,就像laravel 文档在Displaying Unescaped Data部分所说的那样:

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

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

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

4

1 回答 1

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,这很好,但您必须小心将您的值发送到您的服务器并显示给用户。在那里你总是需要用 {{ }} 转义你的数据

于 2016-08-06T00:01:22.227 回答