Eloquent ORM(laravel 5) 是否负责 SQL 注入?

Does Eloquent ORM(laravel 5) take care of SQL injection?

我无法在网上找到它,但是 Eloquent ORM 是否像 PDO 准备语句一样处理 SQL 注入?

是的,但您仍有责任验证传入的数据并转义传出的数据,因为准备好的语句只是图片的一部分。

附带说明 - 我认为依赖注入并不像您认为的那样。 Laravel通过其服务容器进行依赖注入,DI其实是个好东西(https://en.wikipedia.org/wiki/Dependency_injection)

根据您的问题,所有 eloquent 查询都已处理 SQL注入,因为他们在core中使用了PDO驱动。那么你 不用担心,但输入会按原样存储,因此您可能 想要根据应用程序的需要进行清理(HTML 格式, 等等)

无框架"takes care of"SQL注入

负责SQL注射。

框架可能会提供方便地执行此操作的方法,但您仍然必须始终如一地使用这些方法。

例如,您应该使用查询参数而不是将变量连接到 SQL 表达式中。


回复您的评论:

Eloquent 有像 whereRaw() 这样的方法,可以让你写任何你想要的表达式。这里是 an example from the Eloquent docs:

$users = User::whereRaw('age > ? and votes = 100', [25])->get();

如果您对参数使用此 ? 语法,并将值作为后面的数组参数传递,那么是的,您可以安全地依赖 Eloquent 来使用参数化。

但是 说 "Eloquent takes care of SQL injection" 是不准确的,因为这会导致一些天真的开发人员认为您可以做这样不安全的事情:

$users = User::whereRaw("age > {$_GET['age']} and votes = 100")->get();

而且他们错误地认为 Eloquent 可以神奇地为您修复它。 这不是真的。

每个 ORM 都提供了将应用程序变量组合到查询中的安全方法,但也提供了开发人员可以规避这种情况的方法。他们必须提供那些方法,因为总是有部分查询无法参数化。

这就是我所说的正确使用 ORM 并避免不安全代码的意思。