我正在使用Laravel 4和Eloquent。
当我收到用户输入时,我只使用$name=Input::get('name')
,然后执行$a->name=$name;
我不知道函数Input::get
是否保护我免受SQL注入和XSS的攻击。如果没有,我需要做些什么来消毒输入?
而且,当我在视图中显示该值时,我应该使用{{$a}}
还是{{{$a}}}
问候和感谢。
答案 0 :(得分:10)
Laravel使用PDO的参数绑定,因此SQL注入不是你应该担心的。你应该阅读this。
Input :: get()不会过滤任何内容。
三个花括号与e()和HTML :: entities()相同。所有人都称之为支持UTF-8的htmlentities:
htmlentities($your_string, ENT_QUOTES, 'UTF-8', false);
答案 1 :(得分:4)
您应该使用{{{$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);
答案 2 :(得分:0)
答案 3 :(得分:0)
是的,您一直需要将干净的数据保存在数据库中,因为我曾经使用过 HTML Purifier :
HTML Purifier是用HTML编写的符合标准的HTML过滤器库 PHP。 HTML Purifier不仅会删除所有恶意代码(更好 称为XSS),并经过全面审核,安全但允许 白名单,这还将确保您的文档是标准的 符合标准,只有具备以下方面的全面知识才能实现 W3C的规格。由于当前的使用厌倦了使用BBCode 缺乏或不安全的HTML过滤器的前景?拥有所见即所得的编辑器 但从未能够使用它?寻找高品质, 适用于该应用程序的符合标准的开源组件 你正在建造? HTML Purifier适合您!
对于Laravel项目,您可以使用此服务提供商https://github.com/mewebstudio/purifier在项目中包含 HTMLPurifier 。