基本情報技術者試験「SQLインジェクション」の問題
あるWebアプリのログイン処理は、入力されたIDとパスワードを文字列としてSQL文に連結し『該当行が1件以上あれば認証成功』としている。診断で、パスワード欄に特定の文字列を入れるとパスワードを知らなくてもログインできてしまうと指摘された。開発標準でプレースホルダの全面利用が難しい既存箇所に、暫定でなく可能な範囲で確実性の高い対策を施すとき、最も適切なものはどれか。
ア構文をあらかじめ確定させた後に、入力値だけをバインド機構で渡す呼び出しに改める。
イ画面側の入力欄で記号を含む値をその場で弾き、英数字以外を送信できないよう制御を加える。
ウ同一IPからのログイン失敗が一定回数を超えた時点で以後の接続を遮断し、不正な試行の継続を止める。
エ認証後に発行する識別子の有効期限を短く取り、万一奪われた場合に悪用できる時間を狭める。
正解
ア.構文をあらかじめ確定させた後に、入力値だけをバインド機構で渡す呼び出しに改める。
認証回避の原因は、入力をSQL構文に直接連結してデータと命令が混同される点にある。構文を先に確定させ、入力はバインド機構(プレースホルダ)で値としてのみ渡せば、特殊文字を含む入力もSQLの構文には影響せず、条件を常に真にするような注入が成立しなくなる。既存箇所でも該当処理を書き換えれば確実に効く根本対策である。
?選択肢ごとの解説
ア ○認証回避の原因は、入力をSQL構文に直接連結してデータと命令が混同される点にある。構文を先に確定させ、入力はバインド機構(プレースホルダ)で値としてのみ渡せば、特殊文字を含む入力もSQLの構文には影響せず、条件を常に真にするような注入が成立しなくなる。既存箇所でも該当処理を書き換えれば確実に効く根本対策である。
イ ×画面側の文字制限はブラウザの改変や直接の通信送信で容易に回避され、サーバ側で連結している限り注入は成立するため根本対策にならない。
ウ ×IPアドレス遮断は総当たりのような多数失敗を伴う攻撃に効くが、一回の特殊文字列で認証を回避する本問の手口は失敗を伴わず発動しない。
エ ×識別子の有効期限短縮は認証後の悪用時間を狭めるだけで、認証そのものを回避させてしまう入力連結の問題を解消しない。
✎くわしく
SQLインジェクションは『データと命令の混同』が本質であり、認証回避はその典型的な悪用形態である。クライアント側の入力制限は利便性向上には役立つが信頼境界の外であり、サーバ側でのプレースホルダによる構文と値の構造的分離こそが確実な防御線となる。
✓本番での押さえどころ
試験のコツ
『パスワードを知らなくてもログインできる』はSQLインジェクションによる認証回避のサイン。対策はプレースホルダによる値と構文の分離。
覚え方
ログイン文も『値は箱に入れて渡す』。箱(プレースホルダ)に入れた入力は鍵(構文)をいじれない。
よくある誤り
画面側の入力制限やログイン試行の回数制御で防げると考えがちだが、これらは迂回可能か別手口向けであり、サーバ側の構文分離でなければ認証回避は止まらない。
情報セキュリティの他の問題
A社の経理担当者が、取引先を装ったメールに添付された請求書ファイルを業務PCで開いたところ、見慣れない画面が一瞬表示されて消…B社のWebサービスで、複数の利用者アカウントに対し正しいIDとパスワードの組合せによるログインが短時間に外部から成立する事…C社では、退職予定者や異動者のアカウント権限の見直しが滞り、業務上不要になった共有フォルダへのアクセス権が残り続けている。情…D社のファイルサーバがランサムウェアに感染し、業務ファイルが暗号化された。D社は日次でバックアップを取得しているが、バックア…E社の従業員に、取引先銀行を名乗る『口座情報の更新が必要』というメールが届いた。本文中のリンク先URLにアクセスすると、銀行…F社は社外の従業員が、カフェなどの公衆無線LANを利用して社内システムへアクセスしている。通信内容が経路上で第三者に盗聴・改…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0097