【nginx】WebPageTestでSecurity ScoreがFだったので対応する。
ウェブページの速度測定などによく使われるWebPageTestですが、このたび当サイトを測定してみたところ、セキュリティがなかなかひどいスコアだったので対応したいと思います。
当サイトはnginxで動いています。なおかつVultrのVPSのセットアップ機能を使って構築しているので、同様の環境で動いている方は対策をしたほうが良いかもしれません。
とはいってもかなり備忘録的側面が強い記事ですのでご注意ください。
指摘項目
まずは順番に指摘された項目を見ていきましょう。
高リスク
Strict Transport Security – HSTS非対応
Content Secuity Policy – XSS等の未対策
中リスク
X Frame Opetions – クリックジャッキング未対策
低リスク
X Content Type Options – MIME スニッフィング未対策
X XSS Protection – クロスサイトスクリプティング (XSS) 攻撃未対策
これら5項目の指摘がありました。それでは順番にひとつずつ対策をしていきたいと思います。
HSTSに対応する
HSTSは、次回以降の接続でHTTPではなくHTTPSを使用するようにブラウザへ伝える仕組みです。どのWEBアプリを使っても対応するよう警告が出ることが多いですね。私も個人用のサーバでこの警告を見た記憶があります。
対処法は非常に簡単です。設定ファイルのserver内に下記の内容を記入してください。
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
参考サイト
Apach と nginx への HSTS 設定 | ゴミ箱 https://53ningen.com/config-hsts-to-nginx-and-apache/
NginxでHSTS – Qiita https://qiita.com/daisukeoda/items/726935569e1eeb66699b
CSP(Content Secuity Policy)に対応する
XSS(クロスサイトスクリプティング)攻撃等を防止します。
とはいったものの、設定項目がかなり難しく今回は断念。というのもアクセス先が開設初期の現時点では断定できないのです。今後アドセンスや各種アフィリエイトを導入するとなると、なかなか難しいところです。
ハイリスクとして指摘はされていますが、必須というわけでもないようなので今回は見送りとします。サイト内が改ざんされないことを祈るばかりです。
詳しく知りたい方は下記サイトがよろしいかと思います。
参考サイト
Nginx設定の肝 – がとらぼ https://gato.intaa.net/freebsd/memo/nginx_settings
Nginxセキュリティ設定 – Qiita https://qiita.com/hideji2/items/1421f9bff2a97a5e5794
X Frame Optionsを設定する
クリックジャッキングを防止します。
add_header X-Frame-Options SAMEORIGIN;
参考サイト
Nginxセキュリティ設定 – Qiita https://qiita.com/hideji2/items/1421f9bff2a97a5e5794
X Content Type Options
IE向けの対策でしょうか。MIMEスニッフィングを防止します。
The only defined value, “nosniff”, prevents Internet Explorer from MIME-sniffing a response away from the declared content-type. This also applies to Google Chrome, when downloading extensions
https://snyk.io/
add_header X-Content-Type-Options nosniff;
参考サイト
Webサーバで指定すべきヘッダ – Qiita https://qiita.com/d6rkaiz/items/9f4ebad83b3437a0d2ea
X XSS Protection
これもXSS対策ですが、古いブラウザ向けのようです。
add_header X-XSS-Protection "1; mode=block";
参考サイト
今のうちに見直しておきたいnginx設定集 【セキュリティ編】 – Clueit Developersブログ http://cluex-developers.hateblo.jp/entry/secure-nginx-setting-for-2016
再度測定してみた
一応セキュリティはAになりましたが、やはり先程の省略した部分に関しては引き続き指摘を受けています。いずれサイトが安定してきたら対応したいと思います。
とりあえずの対症療法として不正アクセスしてきたボットや海外IPは手当り次第ブロックするのもありかもしれません。
ただし個人的な経験としては、いわゆるVPNサービスは国内サーバを選択しても海外系事業者のサーバーが使われることが基本です。その場合、日本IPで国内サイトにアクセスしても弾かれる場合があるので一律海外アク禁は難しいところです。
最後に
今回は備忘録的な面が強いので、ほとんど引用したものをまとめただけのようになってしまいました。しかしながら少しでも参考になった方がいらっしゃれば幸いです。特に同様の環境をお使いの方に届くと嬉しいですね。VPSの初期設定だとかなりセキュリティ的に危ないというのを感じます。
(このブログもネタ切れせずいつまで続くでしょうね。開設初期は訪問者が少ないのでモチベーションがもちません…)