use*_*030 31 sql-injection codeigniter function built-in data-security
在CodeIgniter中,如何避免sql注入?是否有任何方法在配置文件中设置以避免sql注入?我正在使用此代码来选择值:
$this->db->query("SELECT * FROM tablename WHERE var='$val1'");
Run Code Online (Sandbox Code Playgroud)
这用于插入值:
$this->db->query("INSERT INTO tablename (`var1`,`var2`) VALUES ('$val1','$val2')");
Run Code Online (Sandbox Code Playgroud)
用于从数据库中插入和选择值的另一种方法是CodeIgniter insert()和get()方法.使用CodeIgniter的bulit-in函数时是否有机会进行sql注入
Roc*_*mat 59
CodeIgniter的Active Record方法为您自动转义查询,以防止sql注入.
$this->db->select('*')->from('tablename')->where('var', $val1);
$this->db->get();
Run Code Online (Sandbox Code Playgroud)
要么
$this->db->insert('tablename', array('var1'=>$val1, 'var2'=>$val2));
Run Code Online (Sandbox Code Playgroud)
如果您不想使用Active Records,则可以使用查询绑定来防止注入.
$sql = 'SELECT * FROM tablename WHERE var = ?';
$this->db->query($sql, array($val1));
Run Code Online (Sandbox Code Playgroud)
或者对于插入,您可以使用该insert_string()方法.
$sql = $this->db->insert_string('tablename', array('var1'=>$val1, 'var2'=>$val2));
$this->db->query($sql);
Run Code Online (Sandbox Code Playgroud)
escape()如果您更喜欢运行自己的查询,还有一种方法.
$val1 = $this->db->escape($val1);
$this->db->query("SELECT * FROM tablename WHERE var=$val1");
Run Code Online (Sandbox Code Playgroud)
您可以使用
$this->db->escape()
Run Code Online (Sandbox Code Playgroud)
方法..
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($omgomg).")";
Run Code Online (Sandbox Code Playgroud)
这里列出了其他方法.
http://codeigniter.com/user_guide/database/queries.html