0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Webセキュリティの基本】 ユーザー入力を信頼してはならない理由

0
Posted at

Webアプリケーション開発において、最も重要でありながら、最も軽視されがちな原則があります。

「ユーザー入力を信頼してはならない (Never trust user input)」

これはセキュリティの世界では古典的な教えですが、攻撃手法が高度化した現代でも、依然として多くの脆弱性の根本原因になっています。本記事では、この原則がなぜ重要なのか、どのように実践すべきかを、具体例とともに解説します。

なぜ「ユーザー入力を信頼してはならない」のか

理由はシンプルで、攻撃者も“ユーザー”だからです。

Webアプリケーションは、フォーム、URLパラメータ、Cookie、HTTPヘッダなど、さまざまな経路から入力を受け取ります。これらはすべて、攻撃者が自由に改ざんできます。

つまり、

  • 「普通のユーザーはそんなことしないだろう」
  • 「UIで制御しているから大丈夫」
  • 「JavaScriptでバリデーションしているから安心」

といった考えは、セキュリティの観点では成立しません。

信頼してはいけない入力の例

Webアプリが受け取るデータは、基本的にすべて不正な値が入り得ます。

入力経路 改ざん可能か
URLパラメータ 可能 ?id=1?id=1 OR 1=1 に書き換え
フォーム入力 可能 hiddenフィールドを任意の値に変更
Cookie 可能 ローカルで自由に編集
HTTPヘッダ 可能 User-Agent を攻撃コードに変更
JSON / APIリクエスト 可能 任意の構造に書き換え

「ユーザーが触れないはずの値」ほど危険です。攻撃者はそこを狙います。

信頼した結果、何が起きるのか

1. SQLインジェクション

SELECT * FROM users WHERE id = ${id};

id=1 OR 1=1 を渡されると、全件取得されてしまいます。

2. XSS(クロスサイトスクリプティング)

入力値をエスケープせずにHTMLへ出力すると、

<script>alert('XSS');</script>

のようなスクリプトが実行されます。

3. CSRF

「ユーザーが意図しないリクエスト」を送られることで、勝手に設定変更や購入処理が行われます。

4. パラメータ改ざん

hiddenフィールドや金額情報を改ざんされると、商品価格を勝手に書き換えられることもあります。

どうすれば「信頼しない」を実践できるのか

1. サーバー側で必ずバリデーションする

クライアント側のチェックは“ユーザー体験向上”のためであり、セキュリティ対策ではありません。

2. 入力値をそのまま使わない

  • SQL → プレースホルダを使う(プリペアドステートメント)
  • HTML → 適切にエスケープして出力
  • ファイルパス → ホワイトリスト方式で制御

3. 権限チェックを必ず行う

「URLにアクセスできたらOK」ではなく、
**「そのユーザーがその操作をしてよいか」**を毎回確認する。

4. 外部サービスからのデータも信頼しない

APIレスポンスやWebhookも改ざんされる可能性があります。

「信頼しない」は疑うことではなく、守ること

「ユーザーを信頼してはならない」という言葉は、ユーザーを敵視するという意味ではありません。

むしろ、

“すべてのユーザーを平等に扱い、アプリケーションを安全に保つための姿勢”

と言えます。

セキュリティは「攻撃者との戦い」ではなく、
**「安全な仕組みを淡々と積み上げる作業」**です。

その第一歩が、この原則です。

まとめ

  • Webアプリはあらゆる入力が改ざん可能
  • 「普通のユーザーはしない」は通用しない
  • バリデーション・エスケープ・権限チェックが必須
  • 外部サービスも含めて、入力はすべて疑う

この原則を徹底するだけで、多くの脆弱性は未然に防げます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?