2016-10-15 12 views
1

管理パネルにログインすると、セッションが定義されます。 $ _SESSION ['admin']。管理パネルで 私はこのコードを持っている:ログイン時のセッションでのセキュリティリスク

if(!isset($_SESSION['admin'])){ 
    header("Location: ../index.php"); 
    die(); 
} 

あなたがログインすると、セッションが作成され、あなたが管理者パネルにアクセスすることができます。しかし、この問題がある: 私は別のPHPファイルを作成し、その上にこのコードを入れている:

<?php 
$_SESSION['admin'] = 1; 
header("Location: adminpanel/index.php"); 
die(); 
?> 

私は私がそれにログインせずに管理パネルに行くことができ、このファイルとユーザー名に必要はありませんを実行するとし、パスワード。これは、誰かが私のセッションがパネルにログインできることを知っていれば意味します。 どうすればよいですか?ログインの正しい方法は何ですか?どのようにこの問題を解決するか?

+0

に正しいファイルパーミッションを設定してください。 – Qirel

答えて

0

セッションデータはサーバー上に保持され、すべてのユーザーに固有のものです。これはブラウザとサーバーの間で自動的にネゴシエートされます。セッションをハイジャックする方法 - https://www.owasp.org/index.php/Session_hijacking_attack - がありますが、最新のサーバーとサーバー側のテクノロジのほとんどは、すぐに保護を実装します。

あなたの場合、セッションをハイジャックすることはありません。サーバにアクセスできるので人為的にログインするだけで、攻撃者はできない2番目のファイルを置くことができます。攻撃者がサーバーへの書き込みアクセス権を取得した場合、管理パネルにログインすることはあなたの問題の中では最少です。

要旨:説明したコードにセキュリティ上の脆弱性はありません。正しくテストする方法:コードをサーバーにアップロードし、そのサーバーに別のファイルを置かずに入り込むようにしてください。

+0

私は間違っていないと、彼の質問は、「誰かが自分のスクリプトに直接行くことができ、ログインフォームを通らずにログインセッションを設定できる」ということについてより詳しく考えていると思います。 – mrahmat

+0

私のプロジェクトでは、通常、$ _SESSION ['user']と$ _SESSION ['admin']を使用します。 –

+0

私の質問はこれです:誰かが作成したようなページを作成し、それを私のホストにない他の場所にアップロードしてそのページを実行すれば、私のパネルにアクセスできますか?私はセッションを作成し、次にこのようなヘッダーを使用します:header( "location:www.mysite.com/usercp"); 。このセッションが定義される前にこれは可能ですか? –

1

基本的に誰でもあなたのsessionを設定するファイルにアクセスしないようにして、ログインの確認をしてください。このファイルの名前はlogin.phpとします。人々がそれにアクセスするのを避ける簡単な方法の1つは、conditionsが満たされていない場合、アクセスを拒否することです。あなたがそこにセッションを設定する -

if(login conditions met){ 
    //set session for confirmed login 
    $_SESSION['admin'] = 1; 
    //redirect to where you want 
} else { 
    //conditions not met 
    $_SESSION['admin'] = 0; 
    //redirect to error page 
} 

それとは別に、あなたはサーバ側、あなたが他のファイルを訪問する場合は、管理者パネルに行くことができます。もちろん、

+0

これは正しい答えです。 JWTのようなユーザーを認証するのに役立つような壁のないページとみなされるすべてのページで、ユーザーのログインステータスをチェックする必要があります。 – Terry

関連する問題