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

Zir*_*Qiu 8 php sql laravel eloquent

给出示例代码(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();
}
Run Code Online (Sandbox Code Playgroud)

Eloquent是否使用参数化查询(如PDO)或任何其他机制来阻止SQL注入?谢谢!

eli*_*ide 16

对,但是...

是的,它依赖于内置的ORM功能,例如,它可以防止SQL注入$someModelInstance->save().来自文档:

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

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

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

Raw语句将作为字符串注入到查询中,因此您应该非常小心地不要创建SQL注入漏洞.

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

  • 只要您使用“?”占位符并且不直接连接任何值,就可以。占位符语法的作用就是防止 SQL 注入。 (2认同)