PHP Webアプリケーションでインジェクションがある場合、インジェクションによるログインの回避を防ぐためのユーザーログインの書き方
条件は変更できないものとして、注入を防ぐため回答しないでください
一般的な2つの書き方
・
1
$sql = "select * from user where user_name=$username andpassword=$password";
$res = $db_obj->get_one($sql);
if($ res){
//ログイン成功
}
·
·
2
$sql = "select * from user where user_name=$username";
$res = $db_obj->get_one($sql);
if( $res[password]==md5($password)){
//ログイン成功
}
・
上記2つはどちらも回避可能ですので、安全に書き込んでください
PHP Webアプリケーションでインジェクションがある場合、インジェクションによるログインの回避を防ぐためのユーザーログインの書き方
条件は変更できないものとして、注入を防ぐため回答しないでください
一般的な2つの書き方
·
1
$sql = "select * from user where user_name=$username andpassword=$password";
$res = $db_obj->get_one($sql);
if($ res){
//ログイン成功
}
·
·
2
$sql = "select * from user where user_name=$username";
$res = $db_obj->get_one($sql);
if( $res[password]==md5($password)){
//ログイン成功
}
・
上記2つはどちらも回避可能ですので、安全に書き込んでください
インジェクションの脆弱性があるため、ログインがバイパスされるだけでなく、データベースも安全ではありません。テーブル構造がわかっている場合は、管理者アカウントの挿入も非常に簡単です。したがって、重要なのは注射後に何をするかではなく、注射を予防することです。
最も単純な
$sql = "select * from user where user_name='".addslashes($username)."'";
ormを使ってデータベースを読み書きするのが一般的な書き方ではないでしょうか?
手書きの SQL は本質的に安全ではありません
PDO プリペアドステートメントを使用する