2012-05-07 8 views
0

私はセキュリティに少し新しかったので、誰かが光を照らすことができるかどうか疑問に思っていました。私が間違っている場合セキュリティ上の理由からsession_ids(トークン)とその使用方法は何ですか?

は、トークンのsession_idを使用するときに使用ちょうど用語です...私は正しいですか?

また、セッションID(またはトークン)を使用するのはどういうのですか?私はセキュリティ上の理由からそのことを知っていますが、ログイン時にユーザーに新しいsession_idを与えるはずですか?

すなわち:すべての私のPHPページでは、ユーザーがセッショントークンを持っていない場合ので、彼らはページにアクセスしない

if(isset($_SESSION['token'])){ 
// html body 
} 

を持っていることになっていますか?

ありがとうございます。

+0

トークンセッションIDが設定されていない場合は、ページにアクセスしません。 –

+0

セッションIDを使用しているかどうか、またはセッションIDもっとそれに? – hellomello

+0

[セッショントークンの可能な複製 - どのように動作しますか?](http://stackoverflow.com/questions/5009954/session-token-how-does-it-work) – Gordon

答えて

1

セッションIDは、バレットキーのようなサーバー側のセッション情報を識別するために使用されます。有効なIDが(何らかの方法で)渡されると、PHPはデータにアクセスします。

セッションは、ユーザー認証の詳細を格納する手段として頻繁に使用されます。サイトに正常にサインインした後で、セッションを開始していくつかのユーザーデータを保存することができます。これにより、後続のページビューは個人情報の使用を許可するかどうかを決定できます。例えば

、ログインした後、あなたが持っているかもしれません:

session_start(); 
session_regenerate_id(true); // avoid trivial session fixation 
$_SESSION['valid'] = true; 
$_SESSION['user_id'] = 123; // identify the user 
// whatever else you want to add in your session 
header('Location: /index.php'); // redirect the user after signing in 

$_SESSION['valid']は、セッションの採用攻撃を防止トークンです。 session_regenerate_idを使用すると、これはあまり重要ではありません。以降のページビュー時には、セッションが有効で、ユーザーが署名されているかどうかを確認するために、このコードを書くことができます。

session_start(); 
if (!isset($_SESSION['valid'])) { 
    die("Invalid session"); 
} 
// do stuff with $_SESSION['user_id'] 

セッションIDのは、主に二つの方法で渡すことができます(一般的な)クッキーを介して、または$_GETを経由して(あまり一般的ではありません)。どのようにセッションIDの.INI設定によって決定され渡されます

  • session.use_cookiesを
(のみ _GETを経由して渡されていないクッキーを許可するかどうか)
  • session.use_only_cookiesを(すべてのクッキーを使用するかどうか)

    もっとここで読む:http://sg.php.net/manual/en/session.configuration.php

  • +0

    はセッショントークンが何であるかを説明しません – Gordon

    +0

    @ゴードンあなたが投稿したリンクを読む;セッショントークンの意図された意味を理解していませんでした。私はいつも "PHPセッションは簡単に悪用できるので、あなたがする必要があること"と考えています:) –

    +0

    '$ _SESSION ['id']!== session_id()は本当ですか? – Gumbo

    1

    あなたはキーカードとしてトークンと考えることができます - あなたの資格情報が有効な場合、通常は、新しいトークンを返すサーバーへのログイン要求を送信します。サーバーからデータを要求すると、資格情報を再送するのではなく、そのトークンを「表示」するだけです。したがって、情報を隠すためにトークンが使用されます。

    セッションIDは必ずしもトークンではありません(強い意味で)。ユーザーを識別するために使用されますが、彼が誰であるか、どのような種類のアクセス権を持っているかについては何も言及していません。

    ただし、ユーザーとそのアクセス権に関する情報をセッションに保存すると(例:$_SESSION['userId'] = 17; $_SESSION['loggedIn'] = true;)、セッションIDはトークンになります。サーバーに送信するとサーバーがユーザーを識別し、サーバーはアクセス付与または却下すべきである。セッションに別のトークンを格納することは意味をなさない。なぜなら、クライアントに送信されない情報を隠蔽することは過度のものだからである。ユーザーに関する情報をセッションに安全に保存し、その情報をトークンとしてセッションIDを使用することができます。

    関連する問題