我尝试创建用于创建此类用户的表单,此表单也将用于使用表单模型绑定显示数据:
{{ 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)
答案 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,它很好但是您要小心将您的值发送到您的服务器并显示给用户。在那里,您始终必须使用{{}}
来逃避您的数据