Laravel Eloquent:SQL注入预防是自动完成的吗?

2022-08-30 15:41:11

给定示例代码(Message是一个雄辩的模型):

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注入?


答案 1

是的,但是...

是的,当您依赖内置的ORM功能时,它会执行SQL注入预防,例如.从文档中$someModelInstance->save()

Laravel 的数据库查询构建器为创建和运行数据库查询提供了一个方便、流畅的界面。它可用于在应用程序执行大多数数据库操作,并适用于所有受支持的数据库系统。

Laravel 查询生成器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。

请注意,如果您构建原始 SQL 语句并执行这些语句或使用原始表达式,则不会自动受到保护。更多来自文档的内容

原始语句将作为字符串注入到查询中,因此应非常小心,以免产生 SQL 注入漏洞。

在构建原始 SQL 语句或表达式时,应始终使用参数化查询。请参阅上面的最后一个链接(以及文档的其他部分,如wel),以获取有关如何在Laravel / Eloquent中执行此操作的信息。


答案 2

推荐