Session を使用して PHP で Web ページを保護する

WBOY
リリース: 2016-06-21 08:57:07
オリジナル
1299 人が閲覧しました

多くの場合、特定の Web ページを保護する必要があります。典型的な例は、フロントエンドの閲覧ページとバックエンドの管理ページのセキュリティです。これは、WEB 上で最も一般的に使用されるページ セキュリティ モードでもあります。私も PHP4 で小規模な書籍管理システムを開発したときに、このセキュリティ問題に遭遇しました。そこで、PHP4 の新機能であるセッションについて考えてみました。


要件の目的: 同一サイト上で、非特権ユーザー、一般許可ユーザー、スーパーユーザーが異なるページを表示および使用できます。

実装方法: 保護するページにさまざまなレベルのセキュリティ検査テンプレートを含めます。

注:
1 > ユーザーのブラウザが Cookie を使用せずに保護されたページを閲覧できないようにするため (セッションはデフォルトでクライアント Cookie を使用します)。 2 > 許可の盗難を防ぐため。 (PHP 4 のセッションのデフォルトの存続期間は、セッションが確立されてからブラウザが閉じられるまでです。)

使用方法:
1 > 一般的な保護が必要なページのコードの先頭に include ("security2.PHP") を追加します。 2 > 特別な保護が必要なページのコードの先頭に include ("secturity1.PHP") と include ("secturity2.php") を追加します。 (すべてのファイルが同じフォルダー内にあると仮定します)

プログラムコードと詳しい説明:
security1.PHP 特別なユーザー ページ保護テンプレート
security2.PHP 一般ユーザーページ保護テンプレート
login2.PHP ユーザーログインページ

まず、login2.PHP (ユーザーログインページ) のコードを見てみましょう:


PHP
session_register("user");#ユーザー名変数を追加
session_register("password"); #パスワード変数を追加します session_register("tmLast"); #時間変数を追加
if($user==""){#初めてのログインかどうかを判断します
$error="名前を選択してパスワードを入力してください!"; }
$tmLast=date("U"); #ログイン時刻を記録
if($user1)
$user=trim($user1); #ユーザー名を記録します (user1 変数が引用されているのはなぜですか? 読者は自分で考えてください。)
$password=trim($password1); #パスワードを記録します
if($user1&&$password1){
if($password1==888){ #ログインパスワードがデフォルトのパスワード 888 であるかどうかを確認します。 PHP プログラムを終了します
$sid="PHPSESSID=".session_id(); #現在のセッションの ID 番号を保存します
$warning="あなたのパスワードはデフォルトのパスワード 888 のままです。変更してください。"; header("Location:changePassword.PHP?$sid&warning=$warning"); #警告パラメータの警告をchangePassword.phpページに渡します
exit(); #PHP プログラムを直ちに終了します
}
if(strto lower($user)=="root"){ #ログインしているユーザーがスーパーユーザーであるかどうかを判断し、ユーザーを自分で拡張できます
$fileName="backend_index.PHP"; }
他{
if(!$fileName) #ログインページに入る前のページが保護されたページかどうかを判断します
$fileName="インデックス.PHP"; }
$sid="PHPSESSID=".session_id(); #現在のセッションの ID 番号を保存します
header("Location:$fileName?$sid); #ログインに成功し、指定されたページに入り、ユーザーが Cookie を使用せずにセッション値を読み取れないように、現在のセッションの ID 番号を渡します
exit(); #PHP プログラムをすぐに終了します
}
?>







ログインページ


PHP
echo "$error"; #ログイン プロンプトを表示
?>
PHP
include("class/dbclass.inc"); #dbclass.inc クラスを呼び出します。使い方は MySQL.inc クラスと同じです
$q=newDB_Sql; #新しいオブジェクトを定義します
$q->connect($Host,$Database,$User,$Password); #MySQL データベースに接続します
$query="selectchrUserName,chrFirstName,chrLastName"
「ユーザーから」。
「wherechrFirstName!=」
"orderbychr名"; $q->query($query); #SQL ステートメントを実行
エコー""
while($q->next_record()){ #データベースから一般ユーザーを呼び出す
if($user==$q->f(0)) #現在のユーザーであるかどうかを判断します
$select="selected"; #現在のユーザーの場合は、デフォルト値に設定します
それ以外
$select=""; echo""andchrPasswd='$password'";
$q->クエリ($クエリ)

if(!$q->num_rows()){ #一致するパスワードを持つユーザーが見つかったかどうかを判断します
$error=urlencode("パスワードが間違っています。または権限がありません。"); header("Location:login2.PHP?fileName=$fileName&error=$error&user=$user"); #パスワードエラーのログインページにジャンプします
}
他{
$sid="PHPSESSID=".session_id();
$q->next_record(); $USERID=$q->f(idUser); #認証済みユーザーの ID 番号を将来の使用のために保存します
}
?>

security1.PHP (特別なユーザー ページ保護テンプレート):

PHP
session_register("user"); #説明は上記と同じです
$privilege="root,macro,jackie"; #スーパー ユーザーのリストを「,」で区切って設定します
$pieces=explode(",",$privilege); #単一のスーパー ユーザー リストを取得します for($i=0;$i if(strto lower($user)==$pieces[$i]){ #スーパーユーザーかどうかを判断する
$hASPrivilege=1; Break; #判定ループから抜け出す
}
}

if(!$hASPrivilege){
if($fileName=="")
$ファイル名=$PHP_SELF
$error=urlencode("このページを閲覧する権限がありません!"); header("場所:login2.PHP?fileName=$fileName&error=$error&id=$id"); exit(); #不正ユーザーのログインページにジャンプします
}
?>






関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート