以下是我在Codeigniter
项目中用于登录管理员用户的代码
public function login()
{
$usename = $this->input->post('username');
$password = $this->input->post('password');
$this->db->where('username', $username);
$this->db->where('password', MD5($password));
$this->db->limit(1);
$query = $this->db->get('user');
if($query->num_rows() == 1)
return true; // login the user
else
return false; // user not found
}
回显查询时
echo $this->db->last_query();
输出如下内容:
SELECT * FROM (`user`) WHERE `username` = 'admin'
AND `password` = '5f4dcc3b5aa765d61d8327deb882cf99' LIMIT 1
现在,当我输入密码value)'; DROP TABLE user;--
时,产生的查询是: -
SELECT * FROM (`user`) WHERE `username` = 'admin'
AND `password` = 'c0b24ab68e0f79e23ebec36e36a5309f' LIMIT 1
所以我认为它sql injection
非常安全,因为codeigniter
active record
会自动转义输入数据。
根据评论进行修改
现在输入的用户名是
username'; DROP TABLE user;--
,然后生成的查询是SELECT * FROM (`user`) WHERE `username` = 'username\'; DROP TABLE user;--' AND `password` = '5f4dcc3b5aa765d61d8327deb882cf99' LIMIT 1
所以我想在这种情况下也会逃避。
但我的问题是,上面的代码是否真的足以阻止所有可能的SQL注入攻击?