4

管理者権限を持つユーザーのみが特定のページを表示できる Web サイトがあります。ログインすると、管理者アカウントへのログイン$_session["is_admin"] = trueが設定されます。次に、管理者権限を持つユーザーのみが表示できるようにしたいページで、is_admin が true かどうかを確認し、それ以外の場合はインデックス ページにリダイレクトします。

if(!$_SESSION["is_admin"]){ //redirect to index.Php} このような状況で Web ページを保護するためのより良い方法はありますか?

ありがとう

4

3 に答える 3

3

公開されていない場所 (public フォルダーの上) にある場合、コードはより安全になるため、問題が発生しにくくなります。ここで何が起こったのですか?

</php
  // Code

パブリック フォルダーにある場合は、ページ全体のコンテンツがプレーン テキストで表示されます。まれではありますが、php タグの欠落はそれほど珍しいことではなく、インクルード ファイルではさらに多くの場合があります (攻撃者がそのインクルード ファイルに直接アクセスする可能性があります)。

また、セッションハイジャックに関するこの他のSOの質問を確認してください。それはあなたの質問に直接関係しています。

編集。Facebook の Criticism Wikipedia ページを読んだところ、非常に関連性が高いので、引用します。

主要なインターネット ニュース サイトによると、2007 年 8 月、訪問者がサイトを閲覧する際に Facebook のホーム ページと検索ページを生成するために使用されたコードが誤って公開されました。Facebook サーバーの構成の問題により、コードが作成するはずの Web ページではなく PHP コードが表示され、サイト上の個人データの安全性に懸念が生じました。

彼らがその日のうちにどこかでこれを尋ねていたら、彼らは暴露されていなかったかもしれません.

于 2013-04-14T22:41:04.710 に答える
2

$_SESSIONグローバルに厳密に依存することは、あまり安全ではありません。セッションを「ハイジャック」し、SESSION IDクライアント側に保存されている を操作できるアプリケーションがあります。FireSheepを見てください。

私がお勧めするのは、ある種の特別なレベルのセキュリティを実装することです。追加レベルのセキュリティには、IP アドレスのホワイトリスト登録、または s の短い有効期限が含まれる場合がありますSESSION

また、安全でないphpセッションにデータを保存することも参照してください(同じ質問ではありませんが、似ています)。

ホワイトリスト IP アドレス:

管理者アクセス用のホワイト リスト IP アドレス で述べたように、ページへのアクセス許可を持つ IP アドレスの記録を保持できます。IP アドレスが許可されたアドレスに該当しない場合、ページへのアクセスは拒否されます。アドレスをデータベースに保存するか、スクリプトにハードコーディングすることができます (ハードコーディングは避けたいと思います)。

上記のリンクの zerkms から取得した、SESSIONテストを組み込んだ変更例を次に示します。

$whitelist = array('192.168.0.1', '192.168.0.2');

if ($_SESSION['is_admin'] !== true || !in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
    //Admin denied.
    header('Location: denied.php'); exit();
}

echo "You're an admin!"

セッションの有効期限を短縮:

ここでガンボの答えを読むことをお勧めします。

その他の資料:

于 2013-04-14T22:43:40.650 に答える
1

ページへのアクセスに関して、管理者ユーザーと非管理者ユーザーのみがいる場合、これは問題ありません。より多くのユーザー レベルがある場合は、代わりにロールを実装することもできます。

于 2013-04-14T22:35:05.763 に答える