问题描述
对,但是…
是的,当您依赖内置的ORM功能时,它可以防止SQL注入$someModelInstance->save()
。从文档:
Laravel的数据库查询构建器为创建和运行数据库查询提供了方便,流畅的界面。它可用于在您的应用程序中执行大多数数据库操作,并可在所有受支持的数据库系统上工作。
请注意,如果您构建原始sql语句并执行这些语句或使用原始表达式,则 不会 自动受到保护。来自文档的更多信息:
在构建原始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();
}
Eloquent是否使用参数化查询(如PDO)或任何其他机制来防止SQL注入?