ニーズ
更新作業中にうっかり消えたセキュリティ設定は目に見えません。監査や顧客が気づくまでは。
アイデア
点検を記憶に頼らないこと。監視対象から離れたところで自動的に動かし、ひとつの障害が別の障害を隠すことがないようにします。
つくったもの
- ウェブサイトが送るべき標準的な保護を点検する仕組み:5つのセキュリティヘッダー、HTTPS への切り替え、Cookie の設定、そして3週間前に警告する証明書の有効期限。
- サイトの外で独自のスケジュールで動き、履歴は専用のデータベースに保存します。
- 認証の入り口の奥にある、非公開のダッシュボード。
成果
- 30分点検の間隔
- 5毎回確認するセキュリティヘッダー
- 3週間証明書の期限切れ前に警告
- 2026年8月30日稼働開始
最初の点検で、使用中のフレームワークのバージョンを明かしてしまうヘッダーを見つけ、1時間以内に修正しました。さらに、自分自身のミスも見つけました。最初のダッシュボードが公開状態でサイトマップにも載っており、実質的に攻撃者向けの地図になっていたのです。その日のうちに閉じ、認証の奥で再公開しました。
画面で見る
学んだこと
セキュリティツールは、まず自分自身の点検に合格しなければなりません。何を監視しているかを公開してしまう監視ツールは、見つけた人にとっての偵察ツールになります。
技術的な詳細 技術スタック、アーキテクチャ、設計判断(技術職の方向け)
技術スタック
- Node.js(npm 依存なし)
- Express
- SQLite (node:sqlite)
- systemd タイマー
- Cloudflare Access
仕組み
- 点検項目:CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy の有無、Server や X-Powered-By による情報漏れがないこと、すべての Cookie の Secure と HttpOnly、HTTP → HTTPS のリダイレクト、3週間以内に期限切れにならない TLS 証明書。
- npm 依存ゼロ:Node の組み込みモジュールだけを使っています。
- 設計上の分離:チェッカーは30分ごとに起動する systemd サービスで、専用の SQLite データベースに書き込みます。ダッシュボードはそのデータベースを読むだけで、自分で点検することはありません。
- 自ら招いた露出のあと:ダッシュボードをサイトマップと robots.txt から外し、サービスの識別子をソースコードの外に移し、専用のサブドメインで Cloudflare Access の奥でのみ再公開しました。
まだ足りない点
- ダッシュボードは非公開(意図的な設計)