セキュリティは“ デフォルト拒否 ”──ホワイトリスト方式の安心設計

こんにちは、阿久梨絵です!
この機能、動くはずなのに…
なんでアクセスできないの?
そんな“止められた体験”の裏には、セキュリティ設計の基本原則が潜んでいます。

それが、“ デフォルト拒否 ”という考え方
この記事では、ホワイトリスト方式の意味と、実装でどう守るかをやさしく解説します。

「デフォルト拒否」ってどういうこと?

セキュリティ設計では、“最初はすべて拒否”が基本です。
そのうえで、明示的に許可されたものだけを通す──これがホワイトリスト方式

対義語は?

ブラックリスト方式:危険なものだけをブロックする(抜け漏れが起きやすい
ホワイトリスト方式:安全なものだけを通す(安心設計

なぜ“拒否が基本”なの?

漏れが起きにくい許可されたものしか通らないため、意図しないアクセスを防げる
予測可能な動作:開発者もユーザーも「何が通るか」が明確になる
ゼロトラスト設計に近づく:信頼せず、検証する設計思想と相性が良い

実装でどう守る?ホワイトリスト方式の例

1.CORS(クロスオリジンリソース共有)

// ❌ワイルドカードで全許可(危険)
res.setHeader(“Access-Control-Allow-Origin”, “*”);

// ✅ホワイトリスト方式
const allowedOrigins = [“https://example.com”, “https://aqlier.com”];
if (allowedOrigins.includes(origin)) {
res.setHeader(“Access-Control-Allow-Origin”, origin);
}

・外部からのアクセスは明示的に許可されたドメインのみ通す

2.入力サニタイズ(XSS・SQLインジェクション対策)

// ❌そのままDBに突っ込む(危険)
db.query(`SELECT * FROM users WHERE name = ‘${req.body.name}’`);

// ✅サニタイズ+プレースホルダー
const sanitizedName = sanitize(req.body.name);
db.query(“SELECT * FROM users WHERE name = ?”, [sanitizedName]);

・入力値は“安全なものだけを通す”処理を挟むのが基本

3.APIアクセス制御

// ❌誰でも叩けるAPI(危険)
app.get(“/admin”, handler);

// ✅認証+ロールチェック
app.get(“/admin”, authenticate, authorize(“admin”), handler);

・APIは“誰が何をできるか”を明示的に制御する

“拒否から始める”ことで、安心が生まれる

「最初は通さない」ことで、
“通していいもの”を見極める習慣が生まれます。

それは、ユーザーの安心だけでなく、
開発者自身の「この設計で大丈夫?」という不安もほどいてくれるのです。

まとめ

ホワイトリスト方式は、信頼を前提にしない設計です。
それは、「なんでこうなるの?」を防ぐための、やさしい拒否

最初は拒否、あとで許可」──この順番が、
アプリやサービスの安心を支える土台になります。
阿久梨絵でした!

上部へスクロール
Verified by MonsterInsights