2016-06-27 27 views
3

背景

私は数年前からPHPの開発者でしたが、主にWordPressやDrupalなどのオープンソースCMSを使用していました。どちらもセッションを独自の方法で管理しています。ほとんどの場合、私はそれらに注意を払っていませんでした。今私はこれらのCMSを使用せずにカスタムWebサイトを構築しています。つまり、セッションを自分で管理する必要があります。これには多くのセキュリティ上の意味があるので、私はそれに関する詳細情報を求めていました。フォームの構築やURLや一般的な情報に影響を与えるセキュリティ上の脅威は理解していますが、セッションの脅威はほとんどありません。安全で安全なセッション名とは何ですか?

Chromeのインスペクタで、セッションCookieの名前が「PHPSESSIONID」であることがわかりました。これはもちろん総体的なものです。だから私はphp.inisession.name = "mysitename"を設定するか、またはsession_name('mysite_' . $some_value);

のような値を使ってコード内で変更することができます。

このセッション名はどのように設定する必要がありますか?これにはWeb標準がありますか?私は1つを検索し、何も見つからなかったかもしれませんが、私は間違ったキーワードを持っています。

この名前を設定した場合のセキュリティ上の影響は何ですか?いくつかの特定の変数を名前に含めるか、またはいくつかの競合の可能性があるために変数を含める必要があります。私は本当にセキュリティ側の最初からここから始まっているので、どんな情報も役立ちます。

+5

セッション名は無関係です。 「this_is_the_session_cookie」、「RDASDF @ 3234erasdfWe4r2343」、または単に「php_sessid」にすることができます。クッキー名として有効な文字列は有効なセッション名です。 1つを選択し、より重要なものに移動します。 –

+0

https://www.owasp.org/index.php/Session_Management_Cheat_Sheet –

+0

私が理解するように、あなたは誰かがあなたのセッション名を知っていることを恐れています。何かを隠そうとしていますか?あなたはPHP部分だけを削除することができます。つまり、クッキーが1つだけあれば、それがセッションであることは明らかです。 –

答えて

2

この名前を変更しても、これについてあまり気にする必要がないことがわかっている限り、大きな影響はありません。 PHPSESSIONIDはそれのための非公式の名前であり、そのためにそれに関する多くの情報を与えない。

セッションの不正使用を防止するために、より重要な部分は、どのような形式のトークンを使用するかです。これについてのより多くの情報が必要な場合は、私に教えてください。

別の非常に重要な側面は、機密情報を処理するために重大な影響を与える可能性のあるSQLインジェクション攻撃です。これを防ぐには、これに関する詳細文を用意することをお勧めしますhere

セッションに戻って、スクリプトの開始時にsession_sartを呼び出してテストを行うことは非常に重要です。以下のセッションを扱う(批評家は大歓迎です)。このセッションには、セキュアフラグやhttpのみのようないくつかのフラグが設定されていなければなりません。here

さらにセッションには制限があり、期限切れになると自動的に破棄されます。 新しいセッションが開始されるたびに、セッションID(名前ではなく値)を再生成することです。このfunctionはこれを正確に実行します。ユーザーがログインしたときに電話するだけです。

これ以上のご質問がある場合は、お気軽にお問い合わせください。

そして、ここではもちろんのログインページを除いて、すべてのファイルの開始時に呼び出され、私の関数である次のように私は、セッションを設定し、私のログインファイルで

function auth() 
{ 
    $curFile = basename($_SERVER["PHP_SELF"]); 
    if($curFile == "login.php") 
    { 
     return; 
    } 

    $domain = $_SERVER["HTTP_HOST"]; 

    if(session_status() != PHP_SESSION_ACTIVE) 
    { 
     session_set_cookie_params(0, "/", $domain, true, true); 
     session_start(); 
    } 

    $now = time(); 
    if (isset($_SESSION["discard_after"]) && $now > $_SESSION["discard_after"]) 
    { 
     session_unset(); 
     session_destroy(); 
     session_set_cookie_params(0, "/", $domain, true, true); 
     session_start(); 
    } 

    session_regenerate_id(true); 

    $_SESSION["discard_after"] = $now + 120; 

    if ((!isset($_SESSION["angemeldet"]) || !$_SESSION["angemeldet"]) && basename($_SERVER["PHP_SELF"]) != "login.php") 
    { 
     header("Location: https://".$domain."/login.php"); 
     die(); 
    } 
} 

session_set_cookie_params(1800, "/", $domain, true, true); 
session_start(); 
session_regenerate_id(true); 
//Do whatever you want to do to your $_SESSION 
$_SESSION["angemeldet"] = true; 
$_SESSION["name"] = "Fany name"; 
//... 
+1

さて、コメントとこの回答から、クッキーの実際の名前は無関係であるように聞こえます。知っておいてよかった。代わりに安全なセッションを作成することに集中することができます。 私はSQLインジェクションとそれを防ぐ方法を知っています。 session_idを再生成することは有用に見えるので、もっと詳しく見ていきます。ありがとう。 – danielson317

関連する問題