目次
入力値の制限とは
WebフォームやAPIでは、ユーザーからさまざまなデータが送信されます。例えば次のような入力項目です。
- 名前
- メールアドレス
- コメント
- 金額
- 数量
これらの入力には、通常最大値・最小値・文字数などの制限が設定されます。
- 名前:最大50文字
- コメント:最大1000文字
- 数量:1〜100
- 金額:0以上の数値
このような制限を設けることで、想定外の入力を防ぐことができます。
入力制限がない場合のリスク
もし入力制限がなければ、攻撃者は極端なデータを送ることができます。例えば次のようなケースです。
- 数百万文字のテキストを送信する
- 異常に大きい数値を送る
- 巨大なデータを繰り返し送信する
このような入力は、サーバーの処理負荷を高めたり、データベースの容量を圧迫したりする原因になります。
DoS攻撃とは
DoS攻撃(Denial of Service attack)とは、サーバーに大量のリクエストや巨大なデータを送ることで、システムの処理能力を圧迫し、サービスを正常に利用できなくする攻撃です。
例えば入力文字数の制限がない場合、攻撃者は数MB〜数GBのデータをフォームから送信することも可能になります。サーバーはそのデータを処理しようとするため、CPUやメモリが大量に消費され、結果としてサイトが重くなったり停止したりする可能性があります。
DB攻撃とは
DB攻撃(データベース攻撃)とは、データベースに対して過剰なデータや異常な値を送ることで、データベースの処理を圧迫したり、エラーや不整合を発生させたりする攻撃です。
例えば次のようなケースがあります。
- 極端に長いテキストをデータベースに保存させる
- 想定外の数値を登録させる
- 大量のレコードを登録させる
入力制限がないと、このようなデータがそのままデータベースに送られ、ストレージの圧迫や処理遅延の原因になります。
サーバー側でのバリデーションが必須
重要なのは、これらの制限を必ずサーバー側でも検証することです。
ブラウザ側の入力制限やJavaScriptのチェックだけでは、簡単に回避されてしまいます。例えば次のような方法です。
- JavaScriptを無効化する
- 検証ツールで制限を変更する
- curlやAPIツールで直接リクエストを送る
そのためサーバー側では、「こんな値が来るはずはない」という前提で処理するのではなく、必ずバリデーションで検証する設計が必要です。
まとめ
システムテストでは、入力値の制限について次のポイントを確認します。
- 各入力項目に最大値・最小値・文字数制限が設定されているか
- 極端に長いデータを送信できないか
- サーバー側でもバリデーションが行われているか
入力制限がないということは、攻撃者にとってはシステムを自由に試せる状態とも言えます。Webシステムでは「こんな値が来るはずがない」と考えるのではなく、どんな入力でも届く可能性を前提に設計することが重要です。