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

Dav*_*345 2 orm pdo sql-injection laravel eloquent

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

Bil*_*win 12

没有框架"照顾"SQL注入.

负责SQL注入.

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

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


你的评论:

Eloquent有一些方法whereRaw()可以让你编写任何你想要的表达式.以下是Eloquent文档中一个示例:

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

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

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

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

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

每个ORM都提供了将应用程序变量组合到查询中的安全方法,但也提供了开发人员可以绕过的方法.他们必须提供这些方法,因为总有一些查询无法参数化.

当我说你正确使用ORM并避免不安全的代码时,这就是我的意思.

  • 也许您没有阅读问题。如果我使用 Eloquent 进行查询,则传入原始变量(无需自己处理 SQL 注入)将由 Eloquent 在幕后处理。正如另一个答案所说,是的。GB。 (2认同)
  • 这应该是公认的答案,非常清楚且写得很好。 (2认同)

mso*_*wal 5

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