我在网上找不到它,但Eloquent ORM是否像PDO预处理语句一样处理SQL注入呢?
答案 0 :(得分:12)
没有框架“负责”SQL注入。
您负责SQL注入。
框架可以提供方便的方法,但您仍然必须始终如一地使用这些方法。
例如,您应该使用查询参数而不是将变量连接到SQL表达式中。
重新评论:
Eloquent有像whereRaw()
这样的方法,可以让你编写任何你想要的表达式。这是an example from the Eloquent docs:
$users = User::whereRaw('age > ? and votes = 100', [25])->get();
如果对参数使用此?
语法,并将值作为数组参数传递,则是,您可以安全地依赖Eloquent来使用参数化。
但不准确地说“Eloquent负责SQL注入”,因为这导致一些天真的开发人员认为你可以做这样不安全的事情:
$users = User::whereRaw("age > {$_GET['age']} and votes = 100")->get();
他们错误地认为Eloquent可以为你神奇地修复它。 事实并非如此。
每个ORM都提供了将应用程序变量组合到查询中的安全方法,但也提供了开发人员可以绕过的方法。他们必须提供这些方法,因为总有一些查询无法参数化。
当我说你正确使用ORM并避免使用不安全的代码时,这就是我的意思。
答案 1 :(得分:3)
根据您的问题,所有雄辩的查询都会得到解决 SQL注入,因为它们在核心中使用PDO驱动程序。那么你 不必担心,但输入会按原样存储,以便您可以 想根据您的应用需求进行消毒(HTML格式化, 等)
答案 2 :(得分:1)
是的,但是你仍有责任验证进入的数据,并将数据转出,因为准备好的声明只是图片的一部分。
作为旁注 - 我不认为依赖注入意味着你认为它意味着什么。 Laravel通过其服务容器进行依赖注入,但DI实际上是一件好事(https://en.wikipedia.org/wiki/Dependency_injection)