2012-01-14 20 views
1

PHPを使用して、混合https/httpウェブサイトを構築しています。ユーザーが(https経由で)ログインすると、ユーザー名とセッションで安全なCookieが設定されます。ログイン後(Cookieが設定された後)、ログインした後に各ページにユーザー固有のコンテンツがあるので、すべてのトラフィックをhttpsにリダイレクトしたいと思います。元々はhttpsだけを使用するように設定されていましたが、それは、必要なときにだけSSLを使用する方が良いと思われます(ユーザーがhttpでログインしていないときに使用されます)。私はこれをPHP/javascriptを使って、または.htaccessファイルにクッキーに関するいくつかのコマンドを追加することで達成できますか?前もって感謝します!ユーザーがログインした後、すべてのWebページをHTTPSにリダイレクトしますか?

+0

Cookieとセッションで操作する場合、常にHTTPSを常に使用する必要があります。そうしないと、HTTP経由のセッションCookieを第三者が簡単に取得できます。 https://www.owasp.org/index.php/Session_hijacking_attackとhttps://www.owasp.org/index.php/Session_Management_Cheat_Sheet – hakre

+0

を参照してください。ログイン時にsession_regenerate_id()を使用していることを確認してください。前のセッションIDが送信されます。 httpは決して役に立たない。これにより、セッションハイジャックの危険のいくつかが防止されます。 – Gerben

+0

以前のセッションIDはhttp?私が懸念している限り、存在してはいけません/最初に作成されるべきではありません。 – Wrikken

答えて

3

これはそうでない場合、これはちょうどふりセキュリティをされた(session.cookie_secureを使用)、あなただけのHTTPS上で動作するようにセッションを設定していると仮定しています。だから、あなたが検出した場合はfalseまたはそれを解除に設定することを忘れない

RewriteCond %{HTTP_COOKIE} wantshttps=true 
RewriteCOnd %{HTTPS} !on 
RewriteCOnd %{REQUEST_METHOD} !POST 
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,QSA] 

を:

setcookie('wantshttps','true',0,'/'); 

そして.htaccess中:

はまた、ログイン時に(HTTP、HTTPSではなく)クッキーを設定することができますクッキーは「真」であるが、ログインしていないユーザ(セッションは期限切れなど)である。

+0

ありがとう!これは完全に機能します。 – ORL

+0

HTTPSプロトコルはMan-In-The-Middle攻撃を防ぎますが、この 'wantshttps'クッキーはHTTP経由で送信されることを意図しています。この場合、それは操作することができ、セッションクッキーもプレーンテキストに送られるので、無用になります。 – martinstoeckli

+0

@martinstoeckli:thats点:誰でも_May_は、HTTPSが必要だと知っていますが、セッションCookieは_HTTPS_でのみ送信される_configured_です。これはページへのリクエスト(ユーザーはログアウトしたユーザー/ゲストとして見えることになります)を捕捉し、ユーザーがログインしているhttpsページにリダイレクトします。もちろん、ほとんどのリクエスト/内部リンクは自動的にhttpsを使用しますが、ユーザーをログアウトしたhttp-variantからログインしたhttps veriantにリダイレクトする他のサイトのリンクをキャッチします。 – Wrikken

0

php.net header()機能を見

1

HTMLのURLが考慮される限り、相対URLはベースアドレスのプロトコルを使用するため、これを処理する必要があります。他のサイトへの参照が必要な場合は、プロトコル名とコロンを省略したURLを使用できます。 //www.example.com/fooこれは、参照ページのプロトコルに応じてhttp://www.example.com/fooまたはhttps://www.example.com/fooと解釈されます。

+0

httpsなしで別のソース/リンクからウェブサイトを(逆リンクして)到着しない限り、訪問者の観点から「突然ログアウトされています」(http/httpsの違い)が混乱しています。したがって、これは有効なコメントですが、もちろん内部リンクにも使用する必要がありますが、検出とリダイレクトはお客様のためにやさしいものです。 – Wrikken

+0

@Wrikken - 要求されたページ全体が保護されているか、HTTPリンクで**コンテンツを表示していないか、またはページが公開されている必要があります.HTTPでリクエストされたときにユーザー固有のコンテンツを除外できます。 – martinstoeckli

+0

それはポイントです:HTTP上でユーザー固有のコンテンツはありませんが、リンクがゲスト(貧弱なコンテンツ)とログインユーザー(余分な機能)の両方に有効で、反映されない多くのアプリケーションがありますこのURLは外部リンクであるため、ユーザーがこのリンクを訪問することを詮索することができます(公開コンテンツのみを使用していることを察知することができます) )は安全性の問題ではない。 – Wrikken

関連する問題