ja:rule:出力
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| ja:rule:出力 [2016/03/03 21:35] – created yohgaki | ja:rule:出力 [2017/07/04 01:30] (current) – [出力] yohgaki | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== 出力 ====== | ====== 出力 ====== | ||
| - | | + | 安全な出力には3つの方法がある |
| - | * | + | |
| + | 出力の3原則 | ||
| + | |||
| + | | ||
| + | * **安全なAPI** - 出力先のシステムが誤作動しない**確実に安全なAPIを安全な方法で利用**する | ||
| + | * **バリデーション** - 出力先のシステムが誤作動しない**確実に安全な形式であることを検証**する | ||
| + | |||
| + | 出力の3原則により「**出力データによって出力先が誤作動しない**」ことを保証できる。出力先にはコンテクストがあり、出力の3原則はどれか一つ使えば良いものでない。コンテクスト、利用できるAPIなどをコンテクストに合わせて適切に利用しなければならない。 | ||
| + | |||
| + | 出力対策は入力対策と**独立**した対策である。全ての出力データは出力コードで確実に安全に出力できることを保証しなければならない。 | ||
| + | |||
| + | セキュアコーディングの目的は「**プログラムが正しく動作することを保証する**」ことである。出力対策だけではこの目的を達成できない(入力対策が必須)であることも理解する。 | ||
| + | |||
| + | 例: 不正なデータをエスケープしたりプリペアードクエリを使っても不正なデータを保存・利用することを防げない。 | ||
| + | |||
| + | <code php> | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | 出力の3原則により「出力先のシステム/ | ||
| + | |||
| + | 例: 整数IDに文字列が表示されることを出力対策では防げない | ||
| + | |||
| + | <code php> | ||
| + | echo 'ID: '. htmlspecialchars($_GET[' | ||
| + | </ | ||
| + | |||
| + | これは出力対策は入力データのコンテクストを識別できないことが理由である。入力データのコンテクスト($_GET[' | ||
| + | |||
| + | 入力データには3種類が存在する。 | ||
| + | |||
| + | * **正しいデータ** | ||
| + | * **入力ミスのデータ** | ||
| + | * <color # | ||
| + | |||
| + | 「不正なデータ」を正しく処理する責任は入力処理コードが、「入力ミスのデータ」を正しく処理する責任はビジネスロジック(MVCのモデル)が所有する。 | ||
| + | |||
| + | ===== ルール ===== | ||
| + | |||
| + | * [[.:out: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | * [[.: | ||
| + | |||
| + | ===== 注意事項 ===== | ||
| + | |||
| + | 出力対策は入力対策と”**独立**”した対策である。出力対策は入力対策と無関係に実施しなければならない。 | ||
ja/rule/出力.1457040909.txt.gz · Last modified: 2016/03/03 21:35 by yohgaki
