首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CodeIgniter防止MS SQL注入

使用CodeIgniter防止MS SQL注入
EN

Stack Overflow用户
提问于 2017-06-09 19:26:17
回答 2查看 613关注 0票数 2

我想找到一个最佳的方式来减轻SQL注入在CodeIgniter框架开发的web应用程序(web应用程序使用MS SQL后端数据库与ODBC连接)。

让我们假设我有一个简单易受攻击的代码,如下所示:

代码语言:javascript
复制
$this->db->query("SELECT * FROM users WHERE Login = '".$_GET['name']."'");

此查询显然容易受到通过HTTP GET参数"name“进行的SQL注入的攻击。

我已经阅读了CodeIgniter文档和我可以在网上找到的所有内容,以了解如何在CodeIgniter中减轻这种简单的SQL注入,并且我已经尝试了以下所有选项:

选项1:

代码语言:javascript
复制
$this->db->query("SELECT * FROM users WHERE Login = ".$this->db->escape($_GET['name']));

选项2:

代码语言:javascript
复制
$this->db->select("*")->from("users")->where('Login', $_GET['name'])->get();

选项3:

代码语言:javascript
复制
$query = "SELECT * FROM users WHERE Login = '?'"; 
$this->db->query($query, array($_GET['name']));

选项4:

代码语言:javascript
复制
$query = "SELECT * FROM users WHERE Login = ?"; 
$this->db->query($query, array($_GET['name']));

我震惊地发现,上述所有四个选项都像初始查询一样容易受到SQL注入的影响。我想知道从安全性的角度来看,CodeIgniter的设计是否如此糟糕,或者我是否遗漏了一些重要的配置部分。

在这种情况下,有没有什么概念性的方法来防止CodeIgniter中的SQL注入?

EN

回答 2

Stack Overflow用户

发布于 2017-06-09 21:20:53

好的,在与这个问题斗争了几个小时之后,我设法自己找到了答案。

3.1.0版本之前的SQL驱动程序中存在CodeIgniter注入漏洞。因此,即使编码风格(查询绑定)从安全角度来看是正确的(如选项4所示),应用程序仍然容易受到通过用户提供的输入进行SQL注入的攻击。

我通过同时安装CodeIgniter 3.0.6和3.1.0并运行相同的查询来验证这一点。CodeIgniter 3.0.6中的代码仍然容易受到SQL注入的攻击,而在CodeIgniter 3.1.0中运行的代码则不是。

CodeIgniter更改日志https://www.codeigniter.com/userguide3/changelog.html

因此,为未来吸取的经验教训。记住还要检查框架的版本。

票数 2
EN

Stack Overflow用户

发布于 2017-06-09 20:57:26

  • 检查每个用户输入的数据类型以及是否适用正则表达式(从不信任用户输入)
  • 使用预准备语句

这需要做大量的工作,特别是如果您的应用程序状况不佳,但这是拥有良好的安全级别的最佳方法

另一种方式(我建议不要使用)可以是使用mod_security或网站管家过滤注入尝试的虚拟修补,但最重要的是:尝试编写健壮的应用程序(虚拟修补可能看起来是一种懒惰的修复方法,但实际上也需要大量的工作和测试,并且实际上应该只在已经很强大的应用程序代码之上使用)

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

https://stackoverflow.com/questions/44456613

复制
相关文章

相似问题

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