ja:rule:入力
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ja:rule:入力 [2017/07/02 00:22] – [ルール] yohgaki | ja:rule:入力 [2017/10/26 11:28] (current) – [ルール] yohgaki | ||
|---|---|---|---|
| Line 6: | Line 6: | ||
| * **ホワイトリスト** - 許可するモノを設定する(入力仕様に従い許可する入力のみ受け入れる) | * **ホワイトリスト** - 許可するモノを設定する(入力仕様に従い許可する入力のみ受け入れる) | ||
| - | である。信頼境界で全ての入力に対してこの2原則を適用する。全ての信頼できない入力値に対して | + | である。信頼境界で全ての入力に対してこの2原則を適用する。全ての信頼できない入力値に対して次のバリデーションを行う。 |
| * **入力値の個数** - 必須/オプション入力以外の入力を含む場合は拒否 | * **入力値の個数** - 必須/オプション入力以外の入力を含む場合は拒否 | ||
| Line 21: | Line 21: | ||
| ソフトウェアの信頼境界には限界がある。同一プロセス・スレッド上で動作する「自分か完全に管理するコード」以外のプログラムからの入力は、基本的に信頼することができない。 | ソフトウェアの信頼境界には限界がある。同一プロセス・スレッド上で動作する「自分か完全に管理するコード」以外のプログラムからの入力は、基本的に信頼することができない。 | ||
| - | 例: Webブラウザからの入力 - 自分が管理するJavaScriptプログラムで制御された入力がWebブラウザ上から送信される場合でも、これらの入力は信頼できない。 | + | > 例: Webブラウザからの入力 - 自分が管理するJavaScriptプログラムで制御された入力がWebブラウザ上から送信される場合でも、これらの入力は信頼できない。 |
| Webサーバーに対するWebブラウザからの入力は、自分が管理するWebページを経由しなくても送信可能である。従って、Webサーバーに対する入力が確実に受け入れ可能であることを保証できない。Webブラウザからの全ての入力は信頼できないので、全て検証(バリデーション)しなければならない。 | Webサーバーに対するWebブラウザからの入力は、自分が管理するWebページを経由しなくても送信可能である。従って、Webサーバーに対する入力が確実に受け入れ可能であることを保証できない。Webブラウザからの全ての入力は信頼できないので、全て検証(バリデーション)しなければならない。 | ||
| - | 例外: 信頼できる計測機器/ | + | > 例外: 信頼できる計測機器/ |
| 送信元、通信経路およびデータの安全性が検証・保証されている場合、その入力は信頼することができる。例えば、信頼できるRDBMSから送信されてきた整数型のレコードIDは信頼できる。ただし、信頼できるシステムからの入力の場合であっても、データの安全性が保証できない場合は信頼できない。外部システムの入力を信頼する場合、リスクが増加することに留意する。例えば、SQLite3データベースのカラムはカラムのデータ型定義に関わらず文字列型データを保存できる。このような外部システムの場合、数値型カラムのデータであっても、データの保存と管理が十分な安全性を保証できない限り、信頼することはできない。 | 送信元、通信経路およびデータの安全性が検証・保証されている場合、その入力は信頼することができる。例えば、信頼できるRDBMSから送信されてきた整数型のレコードIDは信頼できる。ただし、信頼できるシステムからの入力の場合であっても、データの安全性が保証できない場合は信頼できない。外部システムの入力を信頼する場合、リスクが増加することに留意する。例えば、SQLite3データベースのカラムはカラムのデータ型定義に関わらず文字列型データを保存できる。このような外部システムの場合、数値型カラムのデータであっても、データの保存と管理が十分な安全性を保証できない限り、信頼することはできない。 | ||
| Line 35: | Line 35: | ||
| * **不正なデータ** | * **不正なデータ** | ||
| - | 入力仕様に則り「不正なデータ」は確実に入力処理(MVCモデルのコントローラー)で排除されなければならない。「入力ミスのデータ」はビジネスロジック(MVCのモデル)により適切に処理される。 | + | 入力仕様に則り「不正なデータ」は確実に入力処理(MVCモデルのコントローラー)で拒否されなければならない。「入力ミスのデータ」はビジネスロジック(MVCのモデル)により適切に処理される。 |
| + | |||
| ===== ルール ===== | ===== ルール ===== | ||
| + | * [[.: | ||
| * [[.: | * [[.: | ||
| + | * [[.: | ||
| * [[.: | * [[.: | ||
| * [[.: | * [[.: | ||
| * [[.: | * [[.: | ||
| - | | + | * [[.: |
| - | | + | |
| * [[.: | * [[.: | ||
| * [[.: | * [[.: | ||
| - | * [[.:inp:シリアル化したデータを検証無しに信頼しない]] | + | * [[.:inp:署名、暗号化したデータのみを信頼する]] |
| - | * | + | * [[.: |
| ===== 参考文献 ===== | ===== 参考文献 ===== | ||
| Line 59: | Line 62: | ||
| 出力対策は入力対策とは”**独立**”した対策である。出力対策は入力対策の有無に関わらず、出力対策のみで安全性を保証しなければならない。 | 出力対策は入力対策とは”**独立**”した対策である。出力対策は入力対策の有無に関わらず、出力対策のみで安全性を保証しなければならない。 | ||
| + | 入力コードでは「入力のコンテクスト」(データの種別)に応じたバリデーションを行う。出力コードでは「入力のコンテクスト」を判別できない場合がある。また、出力コードでは「出力先のコンテクスト」(出力先の種別、例:SQLならパラメーター、識別子、SQL語句)に応じたセキュリティ処理が必要となる。このため、入力コードでのデータバリデーションと出力コードでのデータバリデーションは異るモノである。 | ||
| + | |||
| + | 入力バリデーションエラーとなる入力は「不正なデータ」であり、正しく処理することが不可能なデータである。**Fail Fast原則**(出来る限り早く失敗させる原則)に則り、「不正なデータ」の拒否はソフトウェアがデータを受け入れた直後に行う。 | ||
ja/rule/入力.1498954945.txt.gz · Last modified: 2017/07/02 00:22 by yohgaki
