我想找到一个最佳的方式来减轻SQL注入在CodeIgniter框架开发的web应用程序(web应用程序使用MS SQL后端数据库与ODBC连接)。
让我们假设我有一个简单易受攻击的代码,如下所示:
$this->db->query("SELECT * FROM users WHERE Login = '".$_GET['name']."'");此查询显然容易受到通过HTTP GET参数"name“进行的SQL注入的攻击。
我已经阅读了CodeIgniter文档和我可以在网上找到的所有内容,以了解如何在CodeIgniter中减轻这种简单的SQL注入,并且我已经尝试了以下所有选项:
选项1:
$this->db->query("SELECT * FROM users WHERE Login = ".$this->db->escape($_GET['name']));选项2:
$this->db->select("*")->from("users")->where('Login', $_GET['name'])->get();选项3:
$query = "SELECT * FROM users WHERE Login = '?'";
$this->db->query($query, array($_GET['name']));选项4:
$query = "SELECT * FROM users WHERE Login = ?";
$this->db->query($query, array($_GET['name']));我震惊地发现,上述所有四个选项都像初始查询一样容易受到SQL注入的影响。我想知道从安全性的角度来看,CodeIgniter的设计是否如此糟糕,或者我是否遗漏了一些重要的配置部分。
在这种情况下,有没有什么概念性的方法来防止CodeIgniter中的SQL注入?
发布于 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
因此,为未来吸取的经验教训。记住还要检查框架的版本。
发布于 2017-06-09 20:57:26
这需要做大量的工作,特别是如果您的应用程序状况不佳,但这是拥有良好的安全级别的最佳方法
另一种方式(我建议不要使用)可以是使用mod_security或网站管家过滤注入尝试的虚拟修补,但最重要的是:尝试编写健壮的应用程序(虚拟修补可能看起来是一种懒惰的修复方法,但实际上也需要大量的工作和测试,并且实际上应该只在已经很强大的应用程序代码之上使用)
https://stackoverflow.com/questions/44456613
复制相似问题