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 并避免不安全代码的意思。
我无法在网上找到它,但是 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 并避免不安全代码的意思。