これはSpring Bootで作成したテスト用アプリケーション。Apache HTTP ServerのResponseを設定して外部攻撃のリスクを減らしたい。

Header set X-Content-Type-Options “nosniff”

MIMEタイプスニッフィング攻撃などに有効。ブラウザはサーバからMIMEタイプを受け取る。Content-Type: text/htmlContent-Type: image/pngなど。ただ、Content-Typeをサーバが指定しない場合、ブラウザはスニッフィング(推測)してMIMEタイプを推測するが、そのスニッフィングを悪用してブラウザに誤ったMIMEタイプを認識させてスクリプトを実行させる。悪い人は要は静的コンテンツをJavaScriptと認識させて発火させたい。Content-Type: text/htmlContent-Type: image/pngをapplication/javascriptと認識させたい。nosniffを設定すると、スニッフィングせずにリソースを拒否する。

設定ファイルを編集します。

sudo vim /etc/httpd/conf/httpd.conf

X-Content-Type-Options ブラウザにMIMEタイプのスニッフィングを防ぐ。

Header set X-Content-Type-Options "nosniff"

Apacheを再起動。

sudo systemctl restart httpd

ブラウザでResponseHeadersを見るとX-Content-Type-Options “nosniff”が付いていればOK。

他にもApacheでセキュリティを強化する設定はこちら。

Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self'; script-src 'self';
Header set X-Frame-Options "DENY"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Header set Content-Security-Policy “default-src ‘self’; script-src ‘self’;

Content Security Policy (CSP) と呼ばれるセキュリティ機能の設定。どのリソースから読み込むかのポリシーを設定する。default-src ‘self’で同一オリジンリソースのみを読み込んで、script-src ‘self’で同一オリジン上のスクリプトのみ実行するようにする。クロスサイトスクリプティング(XSS) や外部スクリプト注入攻撃から守るが、その反面、外部リソースが利用できないリスクもある。読み込む外部リソースを制限するといった設定もできる。

Header set X-Frame-Options “DENY”

Webページが<iframe><frame><object>タグで他のページに埋め込まれることを防ぐ。クリックジャッキング攻撃の防止。これはWebサーバ事態への攻撃というよりもWebを訪れてくれたユーザーを誤操作させる攻撃から守るためのもの。要は自社のWebページを他サイトに埋め込ませない設定。厳しい設定順にDENY、SAMEORIGIN、ALLOW-FROM。ALLOW-FROMはブラウザから非推奨で多分無視される。

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

HTTP Strict Transport Security(HSTS)を有効にする設定でHTTPでアクセスしてもHTTPSを強制する。HTTPを使わせないという意味ではセキュリティ対策と言えると思う。max-age=31536000で1年間有効、includeSubDomainsでサブドメインも対象になる。SSLストリップ攻撃の防止になる。ただし、サーバ側もHTTPSになる対応(SSL証明書や443ポート解放など)をしておかずにこの設定をしてもダメだし、何か不具合を起こしてしまうケースもあるっぽいので設定するなら、サーバ側もHTTPS環境を用意しておく必要がある。

設定してブラウザで見るとResponse Headersに諸々ヘッダーが設定されている。