PHP web應用程式當存在註入的情況下,如何寫使用者登入防止透過注入繞過登入
假設條件不可改,不要回答防止注入
一般的2中寫法
·
1
$sql = "select * from user where user_name=$username and password=$password";
$res = $db_obj->get_one($sql); ){
//登入成功
}
·
·
2
$sql = "select * from user where user_name=$username";
$res = $db_obj->get_one($sql);
if($res
if($res [password]==md5($password)){
//登入成功
}
·
以上2中均可繞過,求安全寫法
PHP web應用程式當存在註入的情況下,如何寫使用者登入防止透過注入繞過登入
假設條件不可改,不要回答防止注入
一般的2中寫法
·
1
$sql = "select * from user where user_name=$username and password=$password";
$res = $db_obj->get_one($sql); ){
//登入成功
}
·
·
2
$sql = "select * from user where user_name=$username";
$res = $db_obj->get_one($sql);
if($res
if($res [password]==md5($password)){
//登入成功
}
·
以上2中均可繞過,求安全寫法
既然已經存在註入漏洞,不只登入可以繞過,連你的資料庫都是不安全的。如果知道你的表格結構,插入一個管理員帳號也是很簡單的事。所以關鍵還是要防注入,而不是注入以後怎麼辦。
最簡單的
$sql = "select * from user where user_name='".addslashes($username)."'";
一般的寫法難道不是使用 orm 讀寫資料庫?
手寫 sql,本身就不安全
使用PDO預處理語句