php - Laravel Eloquent:SQL 注入预防是自动完成的吗?
问题描述
给定示例代码(Message是一个 Eloquent 模型。):
public function submit(Request $request){
$this->validate($request, [
'name' => "required",
"email" => "required"
]);
//database connection
$message = new Message;
$message->name = $request->input("name");
$message->email = $request->input("email");
$message->save();
}
Eloquent 是否使用参数化查询(如 PDO)或任何其他机制来防止 SQL 注入?
解决方案
对,但是...
是的,当您依赖内置的 ORM 功能(例如$someModelInstance->save()
. 从文档:
Laravel 的数据库查询构建器提供了一个方便、流畅的界面来创建和运行数据库查询。它可用于在您的应用程序中执行大多数数据库操作,并适用于所有受支持的数据库系统。
Laravel 查询构建器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。
请注意,如果您构建原始 SQL 语句并执行这些语句或使用原始表达式,则不会自动受到保护。更多来自文档:
原始语句将作为字符串注入到查询中,因此您应该非常小心,不要造成 SQL 注入漏洞。
在构建原始 SQL 语句或表达式时,您应该始终使用参数化查询。有关如何在 Laravel/Eloquent 中执行此操作的信息,请参阅上面的最后一个链接(以及文档的其他部分)。
推荐阅读
- python-3.x - 如何修复“python setup.py egg_info”失败的pytorch安装错误?
- vue.js - 具有相同组件的路由延迟
- javascript - 如何取消绑定元素内的所有事件
- python-3.x - DA-RNN 中的细胞状态
- mysql - 分组连接值在哪里
- python - 将csv文件拆分为两个单独的文件python 3.7
- swift - NSfetchRequest 什么都不返回
- routing - 角度延迟加载的模块子路由在页面重新加载/刷新时不起作用
- bash - 编写用于更新项目依赖项的 bash 脚本的替代方法是什么?
- reactjs - 尝试将 react.js 应用程序部署到 heruko 时出错