Protecting Applications
導入済み| English | 意味 |
|---|---|
| secure by design/sɪˈkjʊə baɪ dɪˈzaɪn/ | 安全設計 |
| secure by default/sɪˈkjʊə baɪ dɪˈfɒlt/ | デフォルト安全 |
| input sanitization/ˈɪnpʊt ˌsænɪtaɪˈzeɪʃn/ | 入力サニタイズ |
| special characters/ˈspeʃl ˈkærɪktəz/ | 特殊文字 |
| control characters/kənˈtrəʊl ˈkærɪktəz/ | 制御文字 |
| parameterised queries/ˌpærəˈmetəraɪzd ˈkwɪərɪz/ | パラメータ化クエリ |
デザインおよびデフォルトで安全
- Secure by design(設計段階でのセキュリティ) は、信頼性のないデータがデータベース、ブラウザ、ファイルシステムへ到達するプロセスを含む開発のあらゆるフェーズにセキュリティを組み込みます。
- Secure by default(デフォルトでのセキュリティ) は、最初から保護設定を有効にします。リスクを低減しますが、製品に脆弱性が一切ないことを保証するものではありません。
入力をデータとして保持する
- 入力サンプリゼーション は、特定の目的のために入力を変換します。バリデーション は、許容される型、長さ、範囲、形式を確認します。どちらも万能な攻撃フィルターではありません。
- 二重引用符やセミコロンは printable な 特殊文字 で、必ずしも制御文字ではありません。合法な名前である
O'Neillが、アポストロフィを含んでいるだけで損なわれるべきではありません。
Choose the control for the destination
Separate SQL values from syntax, protect browser output for its context, and restrict resolved file paths; no universal punctuation filter.
"Secure by default" means a product ships with...
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Safe defaults enable protections from the start; they do not guarantee a vulnerability-free system.
A numeric SQL field accepts 0 OR 1=1. Which control keeps that input from becoming query syntax?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
The input needs no quotes or semicolon. Parameter binding keeps it as data; validate the numeric range too. HTML encoding serves a different destination.
Keep values separate from SQL syntax by using ____ queries.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Bind each value separately rather than joining it into SQL text.
Which statements use controls suited to the destination? Choose all that apply.
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
The first three controls match their destinations. A quote blacklist can damage legitimate names and does not protect all three contexts.
制御手段と宛先を一致させる
- SQLインジェクション に対しては、パラメータ化クエリ を使用します:固定された SQL 構造と、別々にバインドされたデータ値です。バリデーションはチェックを追加しますが、バインディングを代替するものではありません。
- XSS に対しては、安全なテキスト API でプレーンテキストをレンダリングするか、実際の HTML、属性、または他のコンテキストに対して出力エンコーディングを適用します。HTML が許可されている場合は、適切な HTML サンナイザーを使用します。
- ディレクトリトラヴァーサル に対しては、要求されたパスを解像し、それが許容されたディレクトリの外に出るのを禁止します。引用符を拒否するだけでは、境界線を確立できません。
単一の文字ブラックリストではすべての宛先を保護できません。年齢フィールドは 0 OR 1=1 を悪用するために使われることがあり、これには引用符やセミコロンは必要ありません。正しい防御策は、入力をクエリの構文に組み込まないことです。バリデーションでは、年齢が許容範囲内の有効な数値かも確認する必要があります。
Secure by design builds security in from the earliest phase of development.
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
Security is a design principle, not an add-on.
生徒検索では、正確な名前 O'Neill を受け付けるべきです。SELECT name FROM pupils WHERE name = ? のような固定クエリを作成し、入力された名前は別個にバインドします。' OR '1'='1 という入力が提供されても、それは 1 名の名前の値として残り、クエリが変更されることはありません。名前を表示する際は、それをテキストとして挿入し、実行可能な HTML を組み立てないでください。これにより、正当な入力は維持され、両方の宛先がそれぞれの制御手段によって保護されます。
設計にセキュリティを組み込み、安全なデフォルトを有効にします。タスクに合わせて入力 validates を行い、SQL 値を SQL 構文から分離し、ブラウザ出力をエンコードまたは安全にレンダリングし、ファイルシステムの境界を強制してください。記号を削除すればすべての入力攻撃を防げるという主張は避けてください。