1

ユーザーのログイン情報を認証した後、次のセッションを作成します。

 $_SESSION['username']= $userName;

次に、次のようにリダイレクトします。

header('Location:www.domain.com/profile/' . $_SESSION['username'];

ウェブサイトに次のような美容URLを設定したい。www.domain.com/profile/userName

したがって、すべてのリダイレクトリンク(HTML<a>タグまたはPHPheader()関数)で、次のものを使用します。

"www.domain.com/album/" . $_SESSION['username'];

セキュリティの抜け穴はありますか?

編集:

最初にを使用してセッションIDを作成する必要がありますsession_id()か?

だから、チェックするには:

if(!isset($_SESSION['id']){
   //redirect to login page
}
4

3 に答える 3

1

通常、セッションを使用している間は、次の点にも注意する必要があります。

セッション ハイジャック、セッション固定化

ユーザーがログインした後、コードでセッション変数にユーザー名を保存し、セッション変数にUSER AGENTなどのもう1つの一意の値を保存することをお勧めします。ユーザーがアクセスするすべてのページで、同じ USER AGENT と SESSION ID が存在するかどうかを確認できるため、非常に安全になります。ハッカーがそれを再現できないように、User AGENT で MD% のような暗号化を実行して、より安全にします。

PHP SECURITY GUIDE より引用

<?php

session_start();

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        /* Prompt for password */
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

?>

参照 :セッションの
PHP セキュリティ ガイド
セッション セキュリティの別のスレッド

于 2009-05-01T19:02:52.847 に答える
0

何を守っていますか?彼らが許可を得ていることを確認するために何をしていますか?あなたは彼らのプロファイルを保護し、彼らがセッションキーを持っているので彼らが認証を持っていることを確認していますか?セッション変数があることを確認することについては言及していません

セッションIDを知る必要さえありません。これは、ユーザーが認証を取得したかどうかを保存するのに重要ではありません。これは、ユーザーが使用する必要のあるセッション情報を示すメカニズムにすぎません。

ユーザーがログインするときに、次のようなものを保存します

$_SESSION['authed_user'] = true;

その後、情報を編集しようとすると、次のようになります。

if ($_SESSION['authed_user']) {
  // do something authed users can do
}

そして当然のことながら、おそらく何らかのレベルの承認が必要になるでしょう。SimpleAuthのようなものの使用を検討することをお勧めします...

于 2009-05-01T18:43:37.230 に答える
0

ユーザーが自分のプロファイルを編集できるようにするページで承認が必要です。彼らがページで編集する場合は、彼らがいるプロファイル ページと同じhttp://www.domain.com/profile/[username]かどうかを確認する必要があります。$_SESSION['username']

そうしないと、誰でも URL を入力して (基本的にプロファイル番号または名前を推測します)、編集することができてしまいます。

ただし、はい、最初にログインしているかどうかを確認する必要があります。

if (IsSet($_SESSION['username'])) {
// Logged in
} else {
// Not logged in
}
于 2009-05-01T19:01:02.007 に答える