User Tools

Site Tools


ja:rule:入力

This is an old revision of the document!


入力

入力処理の基本原則は

  • ゼロトラスト - 全てを信頼しない(検証済みのモノ以外、データおよびコード、は信頼できない)
  • ホワイトリスト - 許可するモノを設定する(入力仕様に従い許可する入力のみ受け入れる)

である。信頼境界で全ての入力に対してこの2原則を適用する。全ての信頼できない入力値に対して

  • 文字エンコーディング - Webアプリへの入力は基本的にテキスト形式($_GET,$_POST,$_COOKIE,$_ENV,HTTP,HTML,JavaScript,JSON,DB,LDAP,XML,SMTP,etc)
  • 長さ - 最小および最大(文字列・バイトデータの場合)
  • 範囲(数値型の場合)
  • 形式 -

ソフトウェアの信頼境界には限界がある。同一プロセス・スレッド上で動作する「自分か完全に管理するコード」以外のプログラムからの入力は、基本的に信頼することができない。

例: Webブラウザからの入力 - 自分が管理するJavaScriptプログラムで制御された入力がWebブラウザ上から送信される場合でも、これらの入力は信頼できない。

Webサーバーに対するWebブラウザからの入力は、自分が管理するWebページを経由しなくても送信可能である。従って、Webサーバーに対する入力が確実に受け入れ可能であることを保証できない。Webブラウザからの全ての入力は信頼できないので、全て検証(バリデーション)しなければならない。

例外: 信頼できる計測機器/データベースなどデバイス/アプリ(OS、アプリが信頼できる)が信頼できるネットワークを利用して送信してきた安全な入力データ

送信元、通信経路およびデータの安全性が検証・保証されている場合、その入力は信頼することができる。例えば、信頼できるRDBMSから送信されてきた整数型のレコードIDは信頼できる。ただし、信頼できるシステムからの入力の場合であっても、データの安全性が保証できない場合は信頼できない。外部システムの入力を信頼する場合、リスクが増加することに留意する。例えば、SQLite3データベースのカラムはカラムのデータ型定義に関わらず文字列型データを保存できる。このような外部システムの場合、数値型カラムのデータであっても、データの保存と管理が十分な安全性を保証できない限り、信頼することはできない。

入力データには3種類が存在する。

  • 正しいデータ
  • 入力ミスのデータ
  • 不正なデータ

入力仕様に則り「不正なデータ」は確実に入力処理で排除されなければならない。「入力ミスのデータ」はビジネスロジック(MVCのモデル)により適切に処理される。

ルール

参考文献

注意事項

出力対策は入力対策とは”独立”した対策である。出力対策は入力対策の有無に関わらず、出力対策のみで安全性を保証しなければならない。

ja/rule/入力.1498824074.txt.gz · Last modified: 2017/06/30 12:01 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki