2

stackoverflow の「セッション、クロスドメイン、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

すでに述べたように、投稿されたすべてのソリューションを試しました。参考までに、これを見てみましょう: PHP で HTTP から HTTPS に切り替えるときにセッションが失われましたサブドメイン全体の PHP セッション で述べたように、
このスニペットを拡張しようとしましたが、どちらも機能しません。 私も試しましたsession_set_cookie_params
ini_set('session.cookie_domain', '.domain.com');

編集:要求された回答のように、使用されたコードは次のとおりです(Jacobが最初に投稿したもの:PHPでHTTPからHTTPSに切り替えるときにセッションが失われました

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常に空です。

ヒントはありますか?

4

2 に答える 2

1

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

これがどのように機能するかの例については、Firesheep を参照してください。

于 2012-04-24T02:07:31.980 に答える
0

いつものように、いくつかのコードを見ると役に立ちます。おそらく、セッションを保存するセクションと、Cookie/データベースの使用方法です。これは、クロスドメイン認証を行う方法に関する素晴らしいチュートリアルです。この男にさらに賛成票を投じてください!

于 2012-04-24T01:58:51.087 に答える