2012-02-11 6 views
2

私は、クレジットカード処理を扱う1つのPHPファイルを持っています。それはクレジットカード番号を入力するためのフォームとして開始し、次に「確認」画面(クレジットカード番号を表示)になり、もう一度処理して結果を表示します。 3つのロードはすべてPHPのサブミットで行われます(私の確認はJavascriptの方が良いかもしれないが、私はそれを書かなかった)。これは、ディレクトリ内のクレジットカードを扱う唯一のファイルであるため、httpS接続が必要な唯一のファイルです。HTTPSを1つのファイルに強制するにはどうすればよいですか? (PHP)

私は$ _SERVER配列でこれを強制して、SCRIPT_URI(または他のエントリ)の接頭辞から接続するために使用されるプロトコルを探しましたが、接頭辞はありませんでした。

同じディレクトリ内の.htaccessファイルでこれを行う簡単な方法はありますか?その1つのファイルに対してのみどのように強制しますか?他に簡単な方法があれば、どうすればいいですか?

ご迷惑をおかけして申し訳ありませんが、これまでの検索では解決策が見つかっていないため、ベストプラクティスが何であるか分かりません。

ありがとうございます!あなたのフォルダ内のファイル.htaccesで

+0

これを使用するには、そのページへのリンクが正しいことを確認してください。 http://stackoverflow.com/a/9105894/372643 – Bruno

答えて

9

すべてのクレジットカードの処理を行うPHPページの開始時に、あなたがこれを追加することができます。

それは、それが最初httpの上にロードされた場合httpsを使用したことを除いて、バック自体にリダイレクトします。もちろん、ドメインにSSL証明書がインストールされている必要があります。

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url 
    $url = 'https://' . $_SERVER['HTTP_HOST'] 
         . $_SERVER['REQUEST_URI']; 

    header('Location: ' . $url); 
    exit; 
} 

PHPでこの同じロジックを使用して、自分のドメインのすべての要求の始めに常に呼び出されるファイルに、ドメイン全体を保護します。

2

置き、次のコードを:

RewriteEngine On 
RewriteCond %{SERVER_PORT} !443 
RewriteRule (.*) https://www.example.com/require-secure/ [R] 

これは、ポートは443されていない場合は発火(443はHTTPS用)とhttps://www.example.com/require-secure/にリダイレクトします。

注:mod_rewriteが必要とされているが、ほとんど利用でき

+0

参照O/Pは_single_ファイルを要求したので、ルールパターンは 'RewriteRule^secure-file $ https://www.example.com/secure -file [R = 301] '%{HTTPS}に条件を設定するのがより一般的です:-) – TerryE

2

まず第一に、なぜあなたは意図的にあなたのサイトのすべての無担保プロトコルを使用したいのでしょうか?あなたは本当にTLSのオーバーヘッドに苦しんではいけないほど厳しいパフォーマンス予算を持っていますか?時期尚早の最適化は人類の悩みです。

また、クレジットカード処理スクリプトがHTTPSを必要とする唯一のものであるということは、ユーザーのログインシステムがパスワードをクリアに送信していることを意味します。それだけではありませんパフォーマンス - 貪欲、それは完全に貧しい設計です。

妥当な解決策は、mod_rewriteを使用して、そのリンクのHTTPSに強制的にリダイレクトすることです。サーバ設定を全く操作できない場合(.htaccess経由でも)、PHPスクリプトにプロトコルを最初にチェックさせ、HTTPS発行ではリダイレクトして終了させることができます。

+1

私が言ったように、私は別にやるべきことがたくさんあることを知っていますが、実行する必要があるすべてを変更するコントロールがあります。ここから最善を尽くして、適切な時には変更を促すようにしてください。 "mod_rewrite"ソリューションは、ローカルディレクトリの.htaccessファイルに入れますか? 1つのファイルの構文は何ですか? それ以外の場合は、PHPでプロトコルを確認するにはどうすればよいですか?私はそれを正しい方法で行うことを好むだろうが、私が言ったように:私はここで完全なコントロールを持っていない。ありがとう! – Bing