安全なWebアプリケーションの作り方|情報処理安全確保支援士試験 令和3年 春期午前Ⅱ試験 問12
出典:令和3年春期 午前Ⅱ 問12
分野:セキュリティ / セキュリティ実装技術
安全なWebアプリケーションの作り方について,攻撃と対策の適切な組合せはどれか。
| 攻撃 | 対策 | |
| ア | SQLインジェクション | SQL文の組立てに静的プレースホルダを使用する。 |
| イ | クロスサイトスクリプティング | 任意の外部サイトのスタイルシートを取り込めるようにする。 |
| ウ | クロスサイトリクエストフォージェリ | リクエストにGETメソッドを使用する。 |
| エ | セッションハイジャック | 利用者ごとに固定のセッションIDを利用する。 |
- ア:
- イ:
- ウ:
- エ:
TSUNAGARU-ADVICE
まず押さえたいこと
SQLインジェクション対策では、SQL文を文字列連結で組み立てず、プレースホルダを使用して入力値を安全に扱うことが重要です。特に、静的プレースホルダを使うことで、入力値がSQL文の一部として解釈されにくくなります。
迷ったときの判断軸
クロスサイトスクリプティング対策として任意の外部スタイルシートを取り込めるようにするのは不適切です。CSRF対策ではGETメソッドにするのではなく、トークンの利用や重要処理での再認証などが有効です。セッションハイジャック対策では、固定のセッションIDではなく、推測されにくく適切に更新されるセッションIDを使う必要があります。
科目Bにつなげるために
科目Bでは、攻撃名だけでなく、入力値がどこでどのように解釈されるかを読み取る力が問われます。SQLインジェクションはSQL文、XSSはHTMLやJavaScript、CSRFは利用者の意図しないリクエスト、セッションハイジャックはセッションIDの悪用というように、攻撃対象と対策をセットで整理しておきましょう。
SQLインジェクションは、入力値に不正なSQLの断片を混入させ、意図しないSQL文を実行させる攻撃です。
対策としては、SQL文を文字列連結で組み立てるのではなく、プレースホルダを使用してSQL文の構造と入力値を分離することが有効です。静的プレースホルダを使うことで、入力値がSQL文の一部として解釈されにくくなります。
したがって、アが適切です。
❌他選択肢が誤りの理由イ:クロスサイトスクリプティング/任意の外部サイトのスタイルシートを取り込めるようにする。
⇒クロスサイトスクリプティングは、Webページに不正なスクリプトを埋め込ませ、利用者のブラウザ上で実行させる攻撃です。対策としては、出力時のエスケープ処理や入力値の検証などが重要です。任意の外部サイトのスタイルシートを取り込めるようにすることは、対策ではなく、外部コンテンツを悪用されるリスクを高める可能性があります。
ウ:クロスサイトリクエストフォージェリ/リクエストにGETメソッドを使用する。
⇒クロスサイトリクエストフォージェリは、利用者がログイン済みであることを悪用し、利用者の意図しないリクエストを送信させる攻撃です。対策としては、CSRFトークンの付与や重要処理での再認証などが有効です。GETメソッドを使用することは対策ではなく、状態変更を伴う処理をGETで行うと、むしろ不正なリクエストを誘発しやすくなります。
エ:セッションハイジャック/利用者ごとに固定のセッションIDを利用する。
⇒セッションハイジャックは、セッションIDを盗み取るなどして、利用者になりすます攻撃です。対策としては、ログイン後のセッションIDの再発行、推測困難なセッションIDの使用、HTTPSによる通信保護などが重要です。利用者ごとに固定のセッションIDを使うと、セッションIDが漏えいした場合に長期間悪用されるおそれがあり、対策として不適切です。