
基本情報技術者試験基礎・応用
条件を読む・根拠を説明する
入力を再利用する二つの経路
条件を整理し、答えを選んでから解き方を確認しましょう。
問合せ管理を次のように実装した。 1. 利用者入力bodyをSQLのパラメータへバインドして保存する。 2. 管理者はログイン後、保存したbodyをHTMLへ直接連結して読む。 3. 管理者が押す処理ボタンはCookieのセッションだけで認証する。 4. 外部サイトからの処理要求を識別する秘密トークン等はない。 5. 通信は全てHTTPSである。 この条件で、表示時のコード実行と外部サイト起点の意図しない処理を防ぐ組合せはどれか。
答え・解き方を読む
HTMLの出力文脈に応じたエスケープと処理要求のCSRF対策
図で見る
保存・HTML表示・操作要求の出口を分ける
SQLのパラメータ化だけではHTML表示時のコード実行や外部サイトからの操作要求を防げません。表示時の適切なエスケープ等と、CSRF対策を使う出口を分けて確認します。
図は問題の関係を整理する模式図です。記号には各問題の数値を当てはめます。寸法・面積・時間の縮尺や、実施工の全条件は表していません。
考える順序
- 1保存時のSQL対策と表示時のHTML対策は別の境界
- 2HTMLでデータが構文にならないよう出力を処理
- 3外部起点の認証済み要求にもCSRF対策を施す
選択肢ごとの理由
- 比較 · 入力時にHTML用文字置換を行い全出力文脈と処理要求に同じ対策を兼用
出力文脈に合う処理が必要で、文字置換はCSRF対策の代替にもなりません。
- 正解 · HTMLの出力文脈に応じたエスケープと処理要求のCSRF対策
保存時のSQL対策と表示時のHTML対策は別の境界。HTMLでデータが構文にならないよう出力を処理。外部起点の認証済み要求にもCSRF対策を施す。
- 比較 · SQLをバインドしているためHTMLの加工はせずCSRF対策だけ追加
SQLへの混入を防いでも保存値のHTMLへの混入は別に対策が必要です。
- 比較 · HTML出力はエスケープし処理をPOSTにすればトークン等は不要とする
POST要求も外部起点で作れるためメソッドだけでは意図を確認できません。