こんにちは
最近やたらとニュースでWebsiteのハッキングだのサイバー攻撃ってみますよね。
なので初めて作ったWebsiteがどれほどセキュリティが強いのか検証してみたいなと思い検証してみました。
現在私が開発運用して、友人の薬剤師が監査しているwebsiteの,pharama-navi.comというものがあります。Websiteを人生で作ったことがなかったのであまり詳しいことは分からなかったのですが、Tryhackmeでいろいろと勉強していたので、絶対に安全ではないと思い見てみたのが現状です。
Websiteを開発するにあたって、デザイン性や機能性などユーザーが使う際のことを考えてはいたのですが、多言語対応のwebsiteなのでセキュリティ品質もさることながら、サイトの信用性にも欠けると思ったので診断してみました。
Security Headersというサイトで初めて診断したらまさかのF判定。割と基礎的なところができてなかったんだなと思いました。
ダメだった項目は
Content-Security-Policy(CSP)X-Frame-OptionsX-Content-Type-OptionsReferrer-PolicyPermissions-Policy
上記をはじめとする主要なセキュリティヘッダーが一切設定されていない状態でした。
一応THM勉強はしたのですが、実際に作る側になるとそのような役割があったのは完全には覚えておらず、そこでまずはこれらがどんな攻撃を防ぐものなのかひとつずつ復習もあねて調べてみました。
- 1. Content-Security-Policy (CSP)
- 役割: サイト内で「どのドメインからのプログラムや画像を読み込んでよいか」を制限する許可リスト
- 防ぐ攻撃: XSS(クロスサイトスクリプティング)
- なぜ必要か: 悪意のある第三者がサイト内に不正なJavaScriptを注入し、訪問者の個人情報やクッキーを盗み出す攻撃を防ぐ
2. X-Frame-Options
- 役割: 自分のWebサイトを、他のサイトの
<iframe>(埋め込み枠)の中に表示させてよいかを制御するもの - 防ぐ攻撃: クリックジャッキング
- なぜ必要か: 悪意あるサイトがあなたのWebサイトを透明な枠で重ね合わせ、ユーザーに気付かないまま「購入ボタン」や「削除ボタン」をクリックさせる攻撃を防ぐ。
3. X-Content-Type-Options
- 役割: ブラウザが「ファイルの種類(MIMEタイプ)」を勝手に推測して実行するのを禁止する(通常は
nosniffを指定)。 - 防ぐ攻撃: MIMEスニッフィング攻撃
- なぜ必要か: 画像ファイルに見せかけた悪質なスクリプトファイルを、ブラウザが勝手に「プログラム」として実行してしまうリスクを防ぐ。
4. Referrer-Policy
- 役割: 自分のサイトから外部サイトへリンクで移動する際、どの程度の「参照元URL情報(リファラー)」を送信するかを制限する。
- 防ぐ危険: URLに含まれる情報漏洩
- なぜ必要か: URLに個人識別子や検索キーワードが含まれている場合、それが外部サイトにそのまま送信されて漏洩するのを防げる
5. Permissions-Policy
- 役割: サイト上で「カメラ」「マイク」「位置情報」などの端末機能を使ってよいかを制限する。
- 防ぐ危険: デバイス機能の無断悪用
- なぜ必要か: サイト内に埋め込まれたサードパーティ製スクリプトや広告が、訪問者のカメラや位置情報に勝手にアクセスするのを防げる。
というまあ基礎的だけど大事なようなことでした。
ということでheadersを追加してそれらに対してのアプローチをかけていったら
Aランクはとれたのですが、ここで一つ問題があって、headersのところでガチガチに制限をかけると利便性を損ねる可能性があったことです。
アナリティクスやスクリプトがうまく機能しないのはこちらとしても困るというか、目的が違うので、今後サーバーを自分で持ち、さまざまな顧客データや利便性、機能性と情報の安全性みたいなすべてを100%にするのはとても難しいことなのではないかと思いました。(緋の目の時のクラピカみたいな)
情報が増えていき、攻撃する手段も今後は変わりそれを守るための手段もアップデートされていくのでいたちごっこになることは重々承知していますが、そんな日々変わるものを追いかけるのも楽しそう打なと思っている所存です。
ここまで読んでいただきありがとうございました。