2012-04-24 23 views
2

私はここで、 "セッション、クロスドメインとssl"に関するすべての関連トピックを読んでみたと思うstackoverflow。残念ながら何も動作しません。PHPセッションが失われる:サブドメインとhttps(非SSLへのSSL)

私の場合:

loginForm.html(非SSL) - > authUser.php(SSL) - > showAccount.php(非SSL)

問題があること、ですこれらのファイルは異なるサブドメインに置かれ、SSLまたは非SSLでサービスされます。

loginForm.html - >http://dev.domain.com
authUser.php - >https://ssl.domain.com
showAccount.php - >http://dev.domain.com

ユーザーの資格情報が正しい場合、authUser.phpが使用されているセッションを作成する必要がありますshowAccount.php

既に言及したように、私はすべてのポストされた解決策を試しました。 参照のためにこれを見てみましょう:Session lost when switching from HTTP to HTTPS in PHP
でこのスニペットを拡張しようとしましたが、PHP Sessions across sub domainsで説明しましたが、どちらも機能しません。
私はまたini_set('session.cookie_domain', '.domain.com');

を編集しようとした:要求された答えのように、ここでは(本来はここでヤコブにより投稿されました:Session lost when switching from HTTP to HTTPS in PHP)に使用されるコードがある

https://ssl.domain.com/user/authUser.php

<?php 

// auth with database was successful, so create the session 

session_set_cookie_params(0, '/', '.domain.com'); 
session_start(); 

$currentSessionID = session_id(); 
$_SESSION['testvariable'] = 'It worked'; 
$InsecureServerDomain = 'dev.domain.com'; 
$pagePath = '/showAccount.php'; 

echo '<a href="http://' . $InsecureServerDomain . $pagePath . '?session=' . $currentSessionID . '">Transfer Cookie from secure to insecure </a>'; 

?> 

http://dev.domain.com/showAccount.php

<?php 

$currentSessionID = filter_input(GET, "session"); 
session_set_cookie_params(0, '/', '.domain.com'); 

session_id($currentSessionID); 

session_start(); 

if (!empty($_SESSION['testvariable'])) { 
     echo $_SESSION['testvariable']; 
} else { 
     echo 'It did not work.'; 
} 

?> 

$_SESSIONは常に空です。

ヒントはありますか?

答えて

0

いつもどんなコードを見るのが役に立ちます。おそらくセッションを保存するセクションと、Cookie /データベースを使用する方法について説明します。 cross-domain authorizationのやり方に関する素晴らしいチュートリアルです。

+0

バスター、お返事ありがとうございます!私はちょうど要求されたコードを加えました。 – Andrew

1

あなたのログイン/承認にはちょうどを固定することに意味はありません。ネットワークトラフィックを監視している攻撃者は、リクエストごとにサーバーに渡されたログインCookie /セッショントークンを盗み、そのユーザーとしてログインできます。確かに、パスワードは安全ですが、安全ではないWiFiネットワークなどの中間者攻撃によって、ユーザーのセッションが実際にハイジャックされることはありません。

この動作の例については、Firesheepを参照してください。

+0

ありがとう、ジョーダン・マクギガン。 SSLですべてのデータを転送するためのリソースがありません。だから私はセキュリティ/リソースのこの妥協を実装することに決めました。私はちょうどいくつかのコードを追加しました、あなたは何を改善しますか – Andrew

+1

あなたのフィルタは間違っています。 docs:php.net/manual/en/function.filter-input.phpを参照してください。また、フィルタを指定する必要がありますphp.net/manual/en/filter.filters.phpおそらくINPUT_GETを使用します。また、何らかの方法でセッションIDを暗号化またはハッシュしたいと思うかもしれません。自分のトークンを作成することを強くお勧めします。そうすれば、HTTPS/HTTP間で渡すことができるだけでなく、Node.JSにも渡すことができ、プッシュ通知を送信することができます。 –

+0

ありがとうございました。あなたが正しいです、私のfilter_inputでエラーが発生しました()。これは修正されました。クッキーとセッションは正しく設定されていますが(セッション保存パスに表示されます)、 'showAccount.php'はセッションを読み取ることができません。私はセキュリティ問題のために自分のトークンを構築することであなたと一緒にいますが、以前はこの基本的な方法で動作するはずです。それ以上のヒントはありますか? – Andrew

関連する問題