CodeIgniter是否自动阻止SQL注入?

我刚刚继承了一个项目,因为最后一位开发人员离开了。该项目基于Code Igniter构建。我以前从未与Code Igniter合作。


我快速浏览了一下代码,并在控制器中看到了数据库调用,如下所示:


$dbResult = $this->db->query("SELECT * FROM users WHERE username = '".$_POST['user_name']."'");

或像这样的电话:


$dbResult = $this->db->query("SELECT * FROM users WHERE username = '".$this->input->post('username')."'");

代码点火器是否自动清理这些查询以防止SQL注入?


守候你守候我
浏览 340回答 3
3回答

明月笑刀无情

CodeIgniter确实可以避免使用该$this->db->query方法时传递的变量。但是仅当您将变量作为绑定传递时,这是一个示例:$dbResult = $this->db->query("SELECT * FROM users WHERE username = ?", array($this->input->post('username')));还请记住,这$_POST不是首选,$this->input->post因为它所做的是检查变量是否存在以防止错误。

largeQ

CodeIgniter在其数据库层中提供了一些字符串转义功能。摘录自CI手册:在将数据提交到数据库之前,先对其进行转义是非常好的安全措施。CodeIgniter有三种方法可以帮助您执行此操作:$ this-> db-> escape()此函数确定数据类型,使其只能转义字符串数据。它还会自动在数据周围添加单引号,因此您不必:$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";我将发布另外两个示例,但是我不想从阅读手册中获得所有乐趣。

缥缈止盈

不,您发布的代码容易受到SQL注入的影响。您需要使用查询绑定来构造SQL查询。如果您使用的是CI DB库,则可以使用以下代码进行编码(来自用户指南的示例):$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";$this->db->query($sql, array(3, 'live', 'Rick')); 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL