【问题标题】:Laravel - SQL injection prevention with {{{ }}}Laravel - 使用 {{{ }}} 预防 SQL 注入
【发布时间】:2014-12-17 14:12:22
【问题描述】:

我的页面中有一些用 Laravel 制作的表格。根据文档,三重大括号 - {{{ }}} 可以转义输出。所以当我使用时:

{{{ Form::text('name') }}}

我是否可以 100% 确定不会在此表单输入中插入 SQL 注入命令?

【问题讨论】:

  • 不,三重括号会逃避潜在的危险输出。但是您的问题表明对网络的工作原理缺乏了解,也许您应该从一些基本的 HTML 开始,以了解为什么框架无法阻止客户端发送恶意数据。
  • 你错过了很长很长的标记。三重大括号不适用于 SQL 转义。如果你使用 laravel,SQL 注入不是你首先应该担心的。

标签: forms laravel input sql-injection


【解决方案1】:

不,您理解 {{{ }}} 错误。他们逃脱了输出
所以如果你这样做了

{{{ Form::text('name') }}}

结果是这样的:

<input name="test" type="text">

它仍然会生成 HTML 代码,但它会被转义,因此它不会被解释为 HTML 而是纯文本

防止 SQL 注入

在将数据保存到数据库时,您必须防止 SQL 注入。通常,您在控制器中执行此操作。如果你使用 Eloquent 或 Laravel 查询生成器,你不必太担心。它将处理可能的 SQL 注入点。只有在执行原始 SQL 时才需要注意。

来自Laravel Docs

注意: Laravel 查询构建器始终使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。

【讨论】:

  • 我正在使用 DB::table('table')->insert(['name' => $name])。这是原始查询,您的意思是?我应该使用 {{{ $name }}} 吗?
  • 没有。原始查询将使用DB::raw()whereRaw()DB::statement()。方法名称中几乎总是有“原始”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2017-12-17
  • 2012-12-21
  • 2013-05-21
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多