これはSpring Bootで作成したテスト用アプリケーション。Apache HTTP ServerのResponseを設定して外部攻撃のリスクを減らしたい。
Header set X-Content-Type-Options “nosniff”
MIMEタイプスニッフィング攻撃などに有効。ブラウザはサーバからMIMEタイプを受け取る。Content-Type: text/html
や Content-Type: image/png
など。ただ、Content-Typeをサーバが指定しない場合、ブラウザはスニッフィング(推測)してMIMEタイプを推測するが、そのスニッフィングを悪用してブラウザに誤ったMIMEタイプを認識させてスクリプトを実行させる。悪い人は要は静的コンテンツをJavaScriptと認識させて発火させたい。Content-Type: text/html
や Content-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に諸々ヘッダーが設定されている。