| English | 意味 |
|---|---|
| route/ruːt/ | ルータ |
| validate input/ˈvælɪdeɪt ˈɪnpʊt/ | 入力値の検証 |
| status/ˈsteɪtəs/ | ステータスコード |
| SQL injection/ˌes kjuː ˈel ɪnˈdʒekʃn/ | SQLインジェクション |
| parameterised query/ˌpærəˈmetəraɪzd ˈkwɪərɪ/ | パラメータ化クエリ |
検索文字列はクエリを変更する
- 名前検索に対して
' OR 1=1 --を受け取ります。もしこの値をSQLに貼り付けた場合、テキストは名前のままではなく条件を変えてしまう可能性があります。 - ルートは、リクエストメソッドとパスを(handler)にマッピングします。照合を実装する前にルートの契約を明確に保ってください。
形状と権限を確認する
- 入力の検証とは、必須値、型、許可された長さ、範囲の確認を意味します。呼び出し元の権限は別に確認してください。
- ステータスは結果を説明します。成功した照合には200、無効な入力には400、存在しないリソースには404を使用します。権限違反については、アプリの合意したポリシーに従う必要があります。これらは自動的に無効な入力ではありません。
Implemented course's route contractの下でこれらの結果を対応づけます。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
これらの意味自体では、プライベート権限の失敗がどのように表現されるべきかを定義しません。
値をSQL文本の外に保持する
- SQLインジェクションは、信頼できないテキストがSQL構文の一部となることで発生します。パラメータ化されたクエリでは、値をステートメントとは別にバインドします。
- プレイスホルダーは値をバインドするものであり、任意のテーブル名やソート方向ではありません。ルートにそれらが必要な場合は、固定されたサーバーサイドの許可リストからこれらの識別子を選択してください。
提出された名前をSQL構文から分離する参照方法是どれですか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
値のバインディングは、固定されたステートメントからそれらを分離します。
名前にSQLプレースホルダーをバインドすることによって何が変わるかを説明せよ。
難易度 3/5 · 200 コイン + 今日初回完了時に小ボーナス付与
ステートメントは固定されたまま、別々にバインドされた値はデータとして残る。
値プレースホルダーは、任意のテーブル名やソート方向を安全に表せる。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
プレースホルダーは値をバインドする。動的な識別子は、固定されたサーバーサイドの許可リストから選択せよ。
完全なローカル例を実行する
- SQLiteを使用してこのPython例を保存して実行します。特殊な文字列は名前として保存され、その後、バインドされた値として検索されます。
- 結果にはその名前付きの行のみが含まれます。バインドにより、この値がSQL構文になるのを防ぎますが、権限を付与したり、すべてのアプリケーションを安全にしたりするものではありません。
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT)")
name = "' OR 1=1 --"
con.executemany("INSERT INTO students VALUES (?, ?)", [(1, "Mei"), (2, name)])
rows = con.execute("SELECT id FROM students WHERE name = ?", (name,)).fetchall()
print(rows) # [(2,)]
con.close()
完全なSQLiteの例では何が印刷されるか。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
特殊な文字列が格納され、リテラル名として照合される。
エラーを有用かつプライバシー保護の状態に保つ
- ブラウザに対して、無効なフィールドや一時的な失敗など、処理可能な明確なメッセージを提供してください。生のSQLエラー、プライベートな資格情報、またはスタックトレースを返さないでください。
- 敏感な値を除去した保護されたログに診断詳細を記録してください。調査に必要なコンテキストを十分記録し、すべてのプライベートなリクエスト本文をコピーする必要はありません。
一般ユーザーに生のデータベースエラーを返して、SQLのデバッグができるようにします。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
有用かつ安全なメッセージを返す;診断ログを保護し、機密値を削除する。
ハッピーパスだけでなく検証する
- 有効な入力、欠落している入力、誤ったタイプ、過大な入力の確認、アクセス拒否、一致なし、およびシミュレートされたデータベースの故障をチェックしてください。それぞれについて期待される結果を明記してください。
- ドロップダウンの値を含むすべての動的値をバインドし続けてください。ブラウザのリストは、別の値を直接送信することを防止するものではありません。
リクエストを検証し、呼び出し手を認証し、データ値をバインドします。これらは異なる問題に対処するものであり、互いに代替されるものではありません。
適切なサーバーチェックが必要な外部入力はどれですか?該当するものをすべて選択してください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
通常に見える外部値でも、タイプ、長さ、または権限が間違っている可能性があります。
クエリはパラメータ化されているが、いかなる呼び出し側も私人の学生行を読み取れる。まだ欠けているものは何か。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
値の注入へのバインドは、呼び出し側への権限付与ではない。