0

私は次の構造を持っています:

Index.php
Account.php
Login.php
CheckLogin.php

誰かが login.php 経由でログインすると、ユーザー名とパスワードがチェックされ、次のセッション変数が設定されます

$_SESSION['username'] = $username;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

HTTP_USER_AGENT をチェックするファイル CheckLogin.php を含む Account.php にアクセスし、ユーザー名変数が設定されている場合。

ここで私は問題を抱えています。ユーザーが index.php (ホームページ) に戻ってログインした場合、アカウントのリンクを表示したいと思います。ただし、ユーザーがログインしていない場合、つまりサイトにアクセスしただけの場合は、サインアップ リンクを表示したいと思います。私は次のことができると考えていました:

<?php session_start()

if (!isset($_SESSION['username'])) {
// If username is not set destroy the session
session_destroy();
echo ("<a href=\"signup.php\">Sign up</a>");
}
else {
// If username is set
echo ("<a href=\"account.php\">Sign up</a>");
}
?>

これが完全に安全ではないことはわかっていますが、誰かがセッションを乗っ取って account.php にアクセスした場合、セッションを破壊し、正当でない場合はログアウトする必要があるチェックを行います。これはベストプラクティスですか、それともこの望ましい結果を達成するためのより良い方法はありますか? 誰もがサイトにアクセスしてセッションを作成および破棄するのは悪い考えだと思わずにはいられません。それは正しいことですか、それとも他に考慮する必要があることはありますか?

4

2 に答える 2

0

これで確認できます。すべての試行でセッションを破棄する必要はありません。

<?php session_start()

if (isset($_SESSION['username'])) {
    echo ("<a href=\"account.php\">Sign up</a>");
}
else {
    // If username is not set
    echo ("<a href=\"signup.php\">Sign up</a>");
}
?>

誰かがセッションをハイジャックできる場合、その人はあなたのにアクセスすることもできますaccount.php。上記のように、認証システムに関する優れたチュートリアルを読むか、プラグインを使用してください。適切な知識なしに認証を構築することは少し危険です。

于 2012-12-20T22:53:45.430 に答える
0

チェックがセッションのみに基づいている場合は、Web サイトが保護されないことを確認してください。いくつかの提案があります。1- CSRF を使用して、すべての投稿のセキュリティを強化します。2- セッションは常に暗号化する必要があり、ソルト キーを使用する必要があります。これにより、より多くのセキュリティを確保できます。また、説明会だけが Web サイトを保護する最善の方法であるとは限りません。

于 2012-12-20T23:02:58.360 に答える