상품 설명
ローカルで動かしているWebアプリを、外部公開しても情報が漏れない状態から始めるためのテンプレートです。
Node.js標準モジュールのみで動作し、追加インストールは不要です。
■ このテンプレートが防ぐ事故
ローカルアプリをトンネル(Tailscale Funnel / Cloudflare Tunnel / ngrok など)で公開すると、
素朴な実装では認証がすり抜けます。
原因は、トンネルが外部リクエストを 127.0.0.1 から転送するためです。
「ローカルからのアクセスは自分の操作だから信頼してよい」という判定が成立してしまい、
URLさえ知られれば誰でも書き込める状態になります。
// よくある危険なコード
function isLocal(req) {
return req.socket.remoteAddress === "127.0.0.1"; // 外部アクセスも true になる
}
このテンプレートは、中継を示すヘッダー(x-forwarded-for など)があれば外部として扱い、
必ず合言葉を要求します。公開してすぐ安全な状態から始められます。
■ 入っているもの
・server.js
中継ヘッダーによる認証判定、合言葉の総当たり対策(5回失敗で15分ブロック)、
書き込みのレート制限、公開ファイルのホワイトリスト制御、セキュリティヘッダー。
・safe-json.js
JSONを台帳に使うときの安全な読み書き。「読み込み失敗を空配列で握りつぶし、
直後の書き込みで全データを消す」事故と、書き込み途中の破損を防ぎます。
・public/index.html
動作確認ページ。ボタン1つで認証が効いているか試せます。
・public/private.html
非公開ページの例。外部から合言葉なしでは開けません。
・はじめに.md
3分セットアップ、設定項目の説明、公開後に必ず行う検証手順。
■ 設計の要点
設定ファイルの publicFiles は「公開したいものを列挙する」方式です。
既定ではそれ以外すべてが非公開なので、うっかり公開する事故が構造的に起きません。
管理画面・帳簿・顧客データなどは、何も設定しなければ守られます。
■ こんな方に
・ローカルで作ったツールを外出先からも使いたい
・トンネルで公開したが、認証が本当に効いているか不安
・個人開発のアプリに、最低限の防御を後付けしたい
■ 必要なもの
・Node.js(追加パッケージのインストールは不要です)
■ ご注意
・個人利用・小規模用途を想定しています。不特定多数への本格公開には、正式な認証基盤の導入をご検討ください。
・購入者ご自身のプロジェクトには自由に組み込めます。テンプレート自体の再販・再配布はご遠慮ください。
・不具合のご報告は無料で修正し、更新版をお渡しします。
■ 制作者について
実際に運用しているシステムから生まれたテンプレートです。
ここで塞いでいる認証の穴は、私たちが自社システムを公開した直後の攻撃テストで発見し、修正したものです。
その経緯は技術記事として公開しています。
```
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기