Do I need to sanitize the user input Laravel
我正在使用Laravel 4和Eloquent。
当我得到用户输入时,我只使用$name=Input::get('name')然后我做$a->name=$name;
我不知道函数Input::get是否保护我免受SQL注入和XSS的攻击。 如果没有,我需要做些什么来消毒输入?
而且,当我在视图中显示值时,我应该使用{{$a}}还是{{{$a}}}
问候和感谢。
-
除了其他答案之外,如果您决定使用new Something(Input :: all())之类的内容,请确保在Something模型中指定$ fillable字段,以防止批量分配。 不严格地与您的问题有关,但需要注意一些事项。
Laravel使用PDO的参数绑定,因此SQL注入不是你应该担心的。 你应该读这个。
Input :: get()不会过滤任何内容。
三个花括号与e()和HTML :: entities()相同。 所有这些都称为支持UTF-8的htmlentities:
-
如果我使用{{{来显示它,我是否应该在保存信息时使用htmlentities?
-
转义输出,而不是输入。
-
谢谢,但为什么呢?
-
除非您实际使用它,否则无需更改数据。过滤输入,转义输出。
您应该使用{{{$a}}},因为例如Input可以包含HTML标记。 Laravel不会过滤它。
要避免SQL注入,您应该使用绑定运行查询的参数,例如:
1 2
| $var = 1;
$results = DB ::select('select * from users where id = ?', array($var)); |
并不是:
1
| $results = DB::select('select * from users where id = '.$var); |
-
所以我应该使用htmlentities或类似的东西? Input :: get过滤器是什么?
-
@Fylux据我所知,这是获取POST,GET等数据的界面。它修剪数据但不过滤它,所以在显示时你应该使用三重支撑 - 这样htmlentities函数在变量值上运行
-
如果我使用{{{来显示它,我是否应该在保存信息时使用htmlentities?
-
@Fylux不,使用{{{ Laravel将为您完成
-
但如果我的数据库中保存了损坏的输入,有什么问题吗?
-
@Fylux是什么意思?总是存在一些问题并且运行htmlentities或{{{理论上应该解决这个问题
-
我的意思是,如果两件事做得更好,请使用htmlentities和{{{
-
关于你评论,我想我不会有绑定参数的问题,因为我使用Eloquent。