如何避免codeigniter中的sql注入
在CodeIgniter中,我该如何避免sql注入?是否有任何方法来设置配置文件,以避免SQL注入?我使用此代码选择值:如何避免codeigniter中的sql注入
$this->db->query("SELECT * FROM tablename WHERE var='$val1'");
这对于插入值:
$this->db->query("INSERT INTO tablename (`var1`,`var2`) VALUES ('$val1','$val2')");
用来插入,然后从数据库中值的另一种方法是CodeIgniter的insert()
和get()
方法。任何机会,同时使用CodeIgniter的储存卡的函数
CodeIgniter的Active Record方法会自动为您转义查询,以防止sql注入。
$this->db->select('*')->from('tablename')->where('var', $val1);
$this->db->get();
或
$this->db->insert('tablename', array('var1'=>$val1, 'var2'=>$val2));
如果你不想使用活动记录,您可以使用query bindings防止对注射。
$sql = 'SELECT * FROM tablename WHERE var = ?';
$this->db->query($sql, array($val1));
或者对于插入,您可以使用insert_string()
方法。
$sql = $this->db->insert_string('tablename', array('var1'=>$val1, 'var2'=>$val2));
$this->db->query($sql);
如果您更愿意运行自己的查询,那么也有escape()
方法。
$val1 = $this->db->escape($val1);
$this->db->query("SELECT * FROM tablename WHERE var=$val1");
可以检查你的VAR包含数字的字母,这意味着你VAR线杆是你定义的格式SQL注入。 将其插入查询之前
可以使用
$this->db->escape()
方法..
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($omgomg).")";
其他方法在这里列出。
你应该尽量避免直接写你的查询到一个字符串,然后将它们传递给查询功能。更好的选择是使用Active Record类,它将为您建立查询并转义值。
如果您想避免使用Active Record类,那么您可以查看Codeigniter文档,以获取数据库类的详细信息,该文档具有用于在将值传递给查询方法之前转义值的转义方法。http://www.codeignitor.com/user_guide/database/queries.html
奔
虽然接受来自客户端的值,最好使用此代码,
$client = $this->input->post('client',TRUE);
虽然插入更好地笨插入方法使用,
$this->db->insert('tablename',$values);
当使用这种方法codeingniter会自动完成所有的转义操作,所以我们不需要手动转义。
在CodeIgniter中: 有2个动作可以防止SQL注入。 对于那些在网络编程方面有新意的人来说,Web编程中的另一种安全漏洞可能是致命的,因为它可以暴露你的应用程序数据库的内部,它是SQL注入。
再次感谢Codeigniter有能力处理它。但不幸的是,我合作的很多CI程序员(甚至是你)都已经(或可能)忘记了这两个行为,以防止SQL注入的任何情况。
棒与ActiveRecord的能力 的第一件事是用完整的查询这样做不是在处理查询数据的任何情况:
$this->db->query("select * from users where user=$user and password=$password")
你不知道究竟里面$用户或$密码变量当涉及到用户谁会故意做错的事情。即使是XSS sanitiser也不会处理在其中输入引号,分号或短划线字符组合的人。 因此,在这种情况下,您需要了解此Active Record事件,因为它具有专用于防止SQL注入的输入消除器功能。别担心,它支持各种功能链接是这样的:
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
但要记住,如果你还是结合这样的活动记录功能的内部通常(部分)查询功能将无法正常工作:
$query = $this->db->where("title LIKE '%$input%'");
其中实际上可以这样改变。
$query = $this->db->like("title", $input);
重点是,使用CodeIgniter的活动记录的可能性的每一点,不要乱它。
但如果是不行的,还存在另一种 如果你有一个很长的查询,也懒得把它转换为活动记录的风格,您可以使用此功能手动消毒你输入:
$sanitised_title = $this->db->escape($title);
//像查询
$sanitised_title = $this->db->escape_like_str($title);
内使用,你可以放心地串联查询里面的消毒/逃脱输入。
页面roytuts.com/prevent-sql-injection-in-codeigniter/ – user3470953 2016-05-23 09:58:49
从安全助手中使用xss_clean方法也很好。 – 2016-12-08 13:24:06