2011-09-09 6 views
0

データベースにユーザのパスワードがリセットされたときに表示されるresetpwd.phpページがあります。ただし、このページにアクセスするには、パスワードを手動で「/ resetpwd.php」に変更してパスワードをリセットしないでください。どうすればこれを防ぐことができますか?PHP質問 - URLを変更してユーザが他のページに移動するのを止める方法

+1

なぜユーザーはそのページにアクセスできますか? –

+0

パスワードリセットを要求しなかったユーザーがそのページにアクセスできるのはなぜですか? – OliverAsmus

+0

なぜですか?パスワードが実際に変更されない限り、何が危害ですか? –

答えて

2

HTTPサーバーは、ユーザーに提供したページでURLがクリックされたか、ブラウザのロケーションバーに入力されたかどうかを気にしないため、URLの変更を防ぐことはできません。

代わりに、resetpwd.phpにコードを追加して、アクセスしているユーザーが許可されているかどうか、つまりパスワードがデータベースでリセットされているかどうかを確認してください。そうでない場合は、スクリプトをexitに変更するか、ユーザーを別のページにリダイレクトします。

+0

それはいい考えです。私はそれを試してみましょう。ありがとう! – OliverAsmus

1

URLを入力するだけでは、ユーザーがアクセスできないようにすることはできません。ユーザーのパスワードがリセットされたときにフラグを設定し、アカウントにフラグが設定されていないユーザーをリダイレクトすることが、最高です。

このページをユーザーから「隠す」必要がある理由を考える価値があります。たとえば、https://stackoverflow.com/errorに直接ナビゲートできます。そのページを見ることは、実際のサーバーエラーが発生したことを意味するものではありませんが、意図的にそのURLを入力すると、これを直感的に理解する必要があります。

1

ネガティブ回答も正当な回答です。ほっといて。

Noway。 そのまま放置してください。このページへのアクセスを妨げる理由はありません。

+1

さて、このページへのアクセスを妨げる何らかの理由はありません。存在する場合、あなたは設計エラーを持っています... –

-1

は、ユーザーがそのページにどのようにアクセスするかによって異なります。 は私の一部に私はこのアイデアを持っていた:


if($_SESSION['userid'] != $_GET['id']) 
{ 
//check if user if signed in 
if($_SESSION['signed_in'] == true) 
    { 
     //unset all variables 
     $_SESSION['signed_in'] = NULL; 
    $_SESSION['user_name'] = NULL; 
    $_SESSION['user_id'] = NULL; 
    echo 'Error'; 
    } 
    else 
    { 
    echo 'Por favor, log in again. Gracias.'; 
    } 
echo '<script type="text/javascript">self.close();</script>'; 
die(); 
} 

誰かがプライベートなデータが含まれ、このページに取得したい場合、私はちょうどセッションのuser_idで、彼ら場合は、ユーザーIDを比較しますが等しくない(ユーザーがブラウザ側に侵入しようとしている)私は彼をログオフし、javascript行でウィンドウを閉じ、他のすべてを中止します。

+0

それはパスワードページをリセットしました。このサービスを使用する必要がある場合、ユーザーはログインできないことが暗示されています –

関連する問題