我正在使用带有Eloquent的Laravel 4。
当我获取用户输入时,我只是使用$name=Input::get('name')
,然后我执行$a->name=$name;
我不知道Input::get
函数是否能够保护我免受SQL注入和XSS攻击。如果不能,我该如何对输入进行清理?
并且,在我的视图中显示值时,我应该使用{{$a}}
还是{{{$a}}}
?
我正在使用带有Eloquent的Laravel 4。
当我获取用户输入时,我只是使用$name=Input::get('name')
,然后我执行$a->name=$name;
我不知道Input::get
函数是否能够保护我免受SQL注入和XSS攻击。如果不能,我该如何对输入进行清理?
并且,在我的视图中显示值时,我应该使用{{$a}}
还是{{{$a}}}
?
Eloquent ORM使用PDO的参数绑定,因此无需担心SQL注入。当您使用原始SQL时,也应该使用参数绑定。
Input::get()不会过滤任何内容。
双大括号(在已停用的版本中为三个)与e()和HTML::entities()相同。它们都使用UTF-8支持调用htmlspecialchars:
htmlspecialchars($your_string, ENT_QUOTES, 'UTF-8', false);
您应该使用{{{$a}}}
,因为例如输入可能具有HTML标记。 Laravel不会对其进行过滤。
为了避免SQL注入,您应该绑定参数运行查询,例如:
$var = 1;
$results = DB::select('select * from users where id = ?', array($var));
而不是:
$results = DB::select('select * from users where id = '.$var);
这将返回用引号括起来的已过滤字符串,以便在SQL查询中安全使用:
$safe_string = DB::connection()->getPdo()->quote($unsafe_string);
在编程中,您总是需要将干净的数据保存在数据库中,为此我使用了HTML Purifier:
HTML Purifier是一个符合标准的HTML过滤器库,用PHP编写。HTML Purifier不仅会使用经过彻底审核、安全但宽容的白名单删除所有恶意代码(更好地称为XSS),而且还会确保您的文档符合标准,这只有通过全面了解W3C规范才能实现。由于当前缺乏或不安全的HTML过滤器,厌倦了使用BBCode?拥有所见即所得编辑器,但从未能够使用它?正在寻找高质量、符合标准、开源组件以用于您正在构建的应用程序?那么HTML Purifier就是为您而设计的!
对于Laravel项目,您可以使用此服务提供程序https://github.com/mewebstudio/purifier将HTMLPurifier包含在您的项目中。