我在网上找不到它,但是雄辩的ORM是否像PDO预准备语句那样处理SQL注入?
发布于 2017-01-09 13:57:04
根据您的问题,所有有说服力的查询都会处理SQL注入,因为它们在核心中使用PDO驱动程序。因此,您不必担心,但是输入是按原样存储的,因此您可能希望根据应用程序的需要(HTML格式化等)进行清理。
发布于 2017-01-11 15:27:16
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();他们错误地认为雄辩可以神奇地为你修复它。这不是真的。
每个ORM都提供了将应用程序变量组合到查询中的安全方法,但也提供了开发人员可以绕过这一点的方法。它们必须提供这些方法,因为查询的某些部分始终不能参数化。
这就是我所说的由您决定如何正确使用ORM,并避免不安全代码的意思。
发布于 2017-01-09 08:40:08
是的,但验证传入的数据和转义传出的数据仍然是您的责任,因为准备好的语句只是画面的一部分。
顺便说一句--我认为依赖注入并不是你想的那样。Laravel通过其服务容器进行依赖注入,但DI实际上是一件好事(https://en.wikipedia.org/wiki/Dependency_injection)
https://stackoverflow.com/questions/41539095
复制相似问题