首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雄辩的ORM(laravel 5)负责SQL注入吗?

雄辩的ORM(laravel 5)负责SQL注入吗?
EN

Stack Overflow用户
提问于 2017-01-09 07:34:51
回答 3查看 9.3K关注 0票数 6

我在网上找不到它,但是雄辩的ORM是否像PDO预准备语句那样处理SQL注入?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-09 13:57:04

根据您的问题,所有有说服力的查询都会处理SQL注入,因为它们在核心中使用PDO驱动程序。因此,您不必担心,但是输入是按原样存储的,因此您可能希望根据应用程序的需要(HTML格式化等)进行清理。

票数 7
EN

Stack Overflow用户

发布于 2017-01-11 15:27:16

SQL没有框架“负责”注入。

您负责SQL注入。

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

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

请回复您的评论:

Eloquent有像whereRaw()这样的方法,允许你编写任何你想要的表达式。这是an example from the Eloquent docs

代码语言:javascript
复制
$users = User::whereRaw('age > ? and votes = 100', [25])->get();

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

但是说"Eloquent负责SQL注入“是不准确的,因为这会导致一些天真的开发人员认为你可以做这样的不安全的事情:

代码语言:javascript
复制
$users = User::whereRaw("age > {$_GET['age']} and votes = 100")->get();

他们错误地认为雄辩可以神奇地为你修复它。这不是真的。

每个ORM都提供了将应用程序变量组合到查询中的安全方法,但也提供了开发人员可以绕过这一点的方法。它们必须提供这些方法,因为查询的某些部分始终不能参数化。

这就是我所说的由您决定如何正确使用ORM,并避免不安全代码的意思。

票数 27
EN

Stack Overflow用户

发布于 2017-01-09 08:40:08

是的,但验证传入的数据和转义传出的数据仍然是您的责任,因为准备好的语句只是画面的一部分。

顺便说一句--我认为依赖注入并不是你想的那样。Laravel通过其服务容器进行依赖注入,但DI实际上是一件好事(https://en.wikipedia.org/wiki/Dependency_injection)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41539095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档