0

私は PHP は初めてですが、全体的なプログラミングは行っていません。これで数週間困惑しています。

ログインが他のユーザーによって使用され始める Web サイトで作業しているため、その時点で回避策を使用できません。

これは、Cookie を設定するコードです。

ob_start();

...

session_register("myusername");

session_register("mypassword");

$cookiename = "loginsuccess";

$ipforcookie = $_SERVER['REMOTE_ADDR'];

$cookiedata = $myusername._.$ipforcookie;

$cookietime = time()+18000;

setcookie($cookiename, $cookiedata, $cookietime, '/', ".example.com");

...

ob_end_flush();

これは、Cookie が有効かどうかを確認するために使用するコードです。

if(isset($_COOKIE['loginsuccess'])){

    $arr = explode("_", $_COOKIE['loginsuccess']);

    if(strcmp($arr[1], $_SERVER['REMOTE_ADDR']) == 0){

        require("headerLogged.php");

    }else{

        require("header.php");

    }

}else{

    require("header.php");

}

Cookie があるかどうか、および IP が一致するかどうかを確認します。これは、誰かが Cookie を自分のコンピューターまたはそのような基本にコピーしようとした場合に備えています。

問題は、ログインでき、確認したすべての場所に Cookie が登録されていることです... 約 2 時間です。その後、Webサイトはそれを受け入れなくなり、Cookieを削除した後でも、関数呼び出しを変更しない限り、新しいCookieは作成されません...

setcookie($cookiename, $cookiedata, $cookietime, '/', ".example.com");

setcookie($cookiename, $cookiedata, $cookietime, '/');

その後、ログインと検証が再び機能します。2時間ごとに必要に応じて繰り返します。これ以上これを行うことはできません。コードやサイトへのアクセスに関する知識がなくても、他の人がこのログインを使用し始めるからです。

編集:私が今それを後で変更したとき、それは検証できましたが、それが作成されたサイトの一部でのみ(やや明らかに、おそらく).

十分な情報を提供できたことを願っています。また、この問題に関連して、あなたが喜んで私を助けてくれることに感謝します。なぜなら、私が提供した少量のコードでさえ、私の初心者ステータスを明らかにしていると確信しているからです。いずれにせよ、お時間をいただきありがとうございました。

4

2 に答える 2

1

実際にPHPセッションを使用していますか?電話はありsession_register()ますが(ちなみに、廃止されており、避ける必要があります)、session_start()どこにも表示されません。

ただし、ログインシステムには大きな欠陥があります。Cookieはクライアント側に保存されることを忘れないでください。単にIPアドレスをCookieに埋め込むだけでは、だれもがっかりすることはありません。彼らは単に彼らのIPアドレスとブームに一致するように彼らの側でクッキーを編集することができます、彼らはあなたのシステムにいます。

代わりに通常のPHPセッションを使用してください。

于 2011-05-16T21:26:50.830 に答える
0

まず、session_register()PHP 5.3.0以降は非推奨であり、今後は使用しないでください。$_SESSION代わりにスーパーグローバルを使用する必要があります。詳細については、PHPのマンページを参照してください。

また、Cookieに何らかの価値があるかどうかを確認するだけでは、サイトを保護するのに十分ではありません。ブラウザでCookieを偽造するのはかなり簡単であり、Cookieの内容は他のユーザー入力と同じように扱う必要があります(つまり、期待に応えていると思い込まないでください。アンダースコアが含まれているとは限りません)。モックCookieに基づいて、ログインが必要なサイトのどの部分にもアクセスできないようにする必要があります。

CookieにはセッションID値が含まれている可能性があり、セッション自体には、ログインしているユーザーに関する詳細情報が含まれています(user_idですが、パスワードは含まれていません)。user_idを含むCookieを使用して、それを追加の検証として使用することもできます。Cookieやセッションにパスワードを保存しないでください。

于 2011-05-16T21:26:03.950 に答える