为了账号安全,请及时绑定邮箱和手机立即绑定

CodeIgniter是否自动阻止SQL注入?

CodeIgniter是否自动阻止SQL注入?

守候你守候我 2019-12-11 17:09:34
我刚刚继承了一个项目,因为最后一位开发人员离开了。该项目基于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注入?
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

CodeIgniter确实可以避免使用该$this->db->query方法时传递的变量。但是仅当您将变量作为绑定传递时,这是一个示例:


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

还请记住,这$_POST不是首选,$this->input->post因为它所做的是检查变量是否存在以防止错误。



查看完整回答
反对 回复 2019-12-12
?
largeQ

TA贡献2039条经验 获得超7个赞

CodeIgniter在其数据库层中提供了一些字符串转义功能。


摘录自CI手册:


在将数据提交到数据库之前,先对其进行转义是非常好的安全措施。CodeIgniter有三种方法可以帮助您执行此操作:


$ this-> db-> escape()此函数确定数据类型,使其只能转义字符串数据。它还会自动在数据周围添加单引号,因此您不必:


$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

我将发布另外两个示例,但是我不想从阅读手册中获得所有乐趣。



查看完整回答
反对 回复 2019-12-12
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

不,您发布的代码容易受到SQL注入的影响。您需要使用查询绑定来构造SQL查询。如果您使用的是CI DB库,则可以使用以下代码进行编码(来自用户指南的示例):


$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";


$this->db->query($sql, array(3, 'live', 'Rick')); 



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 338 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信