ユーザーが安全なページを表示しているかどうかを検出し、表示していない場合はリダイレクトしたい(ログイン用)。
ただし、サーバー変数が表示される前にサイトがプロキシを経由して移動し、プロキシ(現在)は、URIが明らかにそうでないことを示している場合を通知します$_SERVER['HTTPS']
。'on'
また'on'
、ユーザーが「安全に」ナビゲートしているときも表示されます。
ナビゲートしhttp://
、https://
両方の出力$_SERVER['SERVER_PORT']
= 443
。
プロキシに変更を加えることができないので、知りたいのですが、
- PHPには、真実を検出するための他のオプションがありますか...
- 私は検出とリダイレクトのためにJavaScriptのメカニズムに頼ることに固執していますか?
私はこの質問をアイデアのために採掘しましたが、それらは主$_SERVER['HTTPS']
に信頼できる変数を中心に展開しています。ああ!
この質問は少なくとも似たようなことを経験しているようですが、彼/彼はapacheソリューションを適応させることによってそれを解決することができました。
ユーザーのURIが何で始まるかを検出するために利用できる他のPHPSERVER変数またはトリックはありますか?私のサイトがhttpとhttpsで表示されたときの$_SERVER変数の唯一の違いは、次のとおりです。
- _FCGI_X_PIPE_(ランダムに表示)
- HTTP_COOKIE(sto-id-47873は非セキュアバージョンに含まれていますが、私はそこに入れませんでした)
- REMOTE_ADDR(これと次の2つは不可解に変化し続けます!)
- リモートホスト
- REMOTE_PORT('プロキシピープル'、なぜこれを継続的に変更するのですか?)
これらのアイテムのどれかが、それが裂けて後で痛みを引き起こすことなく体重をかけるのに十分強いですか?プロキシはいつでも変更される可能性があるため、プロキシを介してフィルタリングされたものを信頼するべきではないかもしれません。
これがこの目的のためにJavaScriptを使用する私の計画です。それは私が持っている最高ですか?
function confirmSSL() {
if(location.protocol != "https:") {
var locale = location.href;
locale = locale.replace(/http:\/\//,"https://");
location.replace(locale);
}
}
<body onLoad="confirmSSL()">...
ユーザーが私のコミュニティでJavaScriptを無効にしている場合、彼らは自分たちが何をしているのかを知っていると思います。彼らは手動で安全なゾーンに入ることができるはずです。どのような<noscript>
提案がありふれた/良い習慣でしょうか?このようなもの、おそらく?:
<noscript>
https://blah.more.egg/fakeを使用してナビゲートし、情報を保護します。</noscript>
(適切な説明で)機能するPHPソリューションには、正解が優先されます。より良いJavaScript実装を提出するか、JavaScript実装にリンクしてください。
どうもありがとう!