HTTPSでのみ.htaccessからHSTSヘッダーを設定する方法[クローズ]


82

私のWebアプリケーションは、私が制御するさまざまな数のホストで実行されます。各仮想ホストのApache構成を変更する必要がないように、リポジトリ内の.htaccessファイルを使用してほとんどの構成を追加し、各ホストの基本的なセットアップが数行になるようにします。これにより、新しいバージョンの展開時に構成を変更することもできます。現在、.htaccess(un)setsヘッダーは、いくつかの書き換え魔法を実行し、UAのキャッシュを制御します。

.htaccessを使用してアプリケーションでHSTSを有効にしたい。ヘッダーを設定するだけで簡単です。

Header always set Strict-Transport-Security "max-age=31536000"

ただし、仕様には、「HSTSホストは、非セキュアトランスポートを介して伝達されるHTTP応答にSTSヘッダーフィールドを含めてはならない」と明確に記載されています。したがって、HTTP接続を介してヘッダーを送信するときにヘッダーを送信したくありません。http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14を参照してください。

環境変数を使用してヘッダーを設定しようとしましたが、そこでスタックしました。それを行う方法を知っている人はいますか?


Stack Overflowは、プログラミングと開発に関する質問のサイトです。この質問はプログラミングや開発に関するものではないため、トピックから外れているようです。ヘルプセンターで、ここ質問できるトピックを参照してください。おそらく、スーパーユーザーまたはUnix&Linux StackExchangeが質問するのに適した場所でしょう。DevOpsに関する質問
jww 2016年

6
@jww .htaccessファイルは私のWebアプリリポジトリの一部であり、アプリケーションの目的の動作(キャッシュ、URLの書き換え、適切なヘッダーの設定など)を取得するために開発者によって維持されます。質問はここSOで約2万回表示されます([apache]、[。htaccess]、[mod-headers]タグが利用可能です)。ですから、ここでは話題から外れているとは思いません。
nielsr 2017年

1
「.htaccessファイルは私のウェブアプリリポジトリの一部であり、開発者によって維持されています...」 -どちらもStackOverflowに含めるための基準ではありません。良いスニフテストは、コードを表示できますか?この場合、答えはNOです。調べてみると、Apacheの設定に関する質問です。「質問は2万回近く表示されます...」 -StackOverflowはゴミ捨て場です。ここでトピックに関係のない質問が行われ、検索エンジンによってインデックスが作成されます。この現象の他の例には、SSHを介したファイルの転送が含まれます。開発者もSSHを使用することがあります。
jww 2017年

回答:


113

どうやら、簡単に使用できるHTTPS環境変数が利用可能です。同じ質問を持つ人々のために:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

2
この設定はどのファイルで行われますか?
ted.strauss 2014年

7
@ ted.strauss.htaccessファイルにあります。
禅2015年

何らかの理由で、これは私のサーバーでは機能しません。Apache 2.4
Andy

14
私にとってもうまくいきませんでした。ただし、追加"expr=%{HTTPS} == 'on'"は機能しました。その場合、行全体はHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"です。多分それはalwaysキーワードのためですか?
エイドリアンFöder

3
条件内のHTTPS env変数は、mod_rewrite条件(およびApache expr)で一般的に見られるサーバー変数env=HTTPSは異なることに注意してください。これがあるので、のenv変数は、環境すなわちに依存しています。サーバー構成。時々それは決して設定されません。サーバー変数と同じ値が割り当てられる場合があります(したがって、常に「オフ」または「オン」に設定されます。条件は常に真です。「オン」ではなく、環境変数が設定されているかどうかをテストするだけです。。)@AdrianFöderとしてApache exprのを使用するには、Apache 2.4+に推奨されることを示唆している%{HTTPS}HTTPSenv=HTTPSenv=HTTPS
MrWhite

29

nielsrの回答に基づいて構築するために、私は.htaccessで以下を使用して、ドメインをChromeブラウザーにハードコードするhttps://hstspreload.orgでの安全な展開の推奨事項を満たしました。これによりサブドメイン全体にHSTSが適用され、プリロードリストに含めることは簡単に元に戻せないため、rtfmに注意してください。

<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>

6
ドメイン全体でHTTPSを使用するだけの場合は、もう少し安全です。そうでなければ、それは信じられないほど危険です-したがって、それについて警告せずにそれを提案することは無責任です。あなたのウェブサーバーがトップレベルドメイン(example.com)でのリクエストにこのヘッダーで応答するとしましょう-サブドメインを含めると、httpsではなくhttpのみで別のウェブサーバーによって提供される他のサブドメイン(例:intranet.example.com) 、 動作しないでしょう。プリロードタグを含めると、これをプリロードリストに送信できるため、Webブラウザーにハードコードされてから、元に戻すことはできません。
バリーポラード2016

それは数年後なので、あなたのスニペットは今日でもまだ有効であると言っています。
KGIII

6

これを使用して、https: //hstspreload.orgに準拠するためにhtaccessファイルに配置できます。これを.htaccessファイルに入れます。

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L,E=HTTPS:1]
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

まず、https以外からhttpsへのリダイレクトを行います。非wwwhttpsをHSTSヘッダー付きのwwwhttpsにリダイレクトします。

http://example.com - > https://example.com - > https://www.example.com - HSTSヘッダを有します)

テスト済みで、https: //hstspreload.orgに準拠しています


4

httpd.conf(これを編集するためのアクセス権がある場合)については、

<VirtualHost 65.81.122.43:443>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
</VirtualHost>

注:HTTPS仮想ホストでのみ設定する必要があり、http仮想ホストでは設定できません。

いつ、.htaccessファイルを使用すべきではありませんか?

.htaccessファイルを許可すると、Apacheはサーバーにアクセスするたびにファイルを検索します。親ディレクトリも検索されるため、これにはある程度の(わずかな)時間がかかり、サーバーのパフォーマンスに影響を与える可能性があります。 ソース


Apacheは常に.htaccessファイルを探します。したがって、.htaccessルックアップを無効にしない限り、Apacheはとにかくファイルをチェックするため、パフォーマンスは向上しません。
RudyBroersma18年

1

さらに別の方法は、常にヘッダーを設定し、非SSL接続の場合は条件付きでヘッダーを削除することです。

Header always set   Strict-Transport-Security "max-age=31536000" early
Header        unset Strict-Transport-Security env=!HTTPS

これには、Headerディレクティブをenv条件とearlyフラグの両方で使用できるという利点があります。シングルでHeaderディレクティブ、envおよびearly一緒に使用することはできません、彼らは(:公式ドキュメントを参照相互に排他的ですhttps://httpd.apache.org/docs/current/mod/mod_headers.html#headerを)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.