ホームページ  >  記事  >  バックエンド開発  >  PHP Web アプリケーションにインジェクションがある場合、インジェクションによるログインのバイパスを防ぐためにユーザー ログインをどのように記述するか?

PHP Web アプリケーションにインジェクションがある場合、インジェクションによるログインのバイパスを防ぐためにユーザー ログインをどのように記述するか?

WBOY
WBOYオリジナル
2016-08-04 09:19:351006ブラウズ

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 プリペアドステートメントを使用する

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。