情報処理安全確保支援士 2017年 秋期 午後1 問02
Webアプリケーション開発におけるセキュリティ対策に関する次の記述を読んで、設問1~3に答えよ。
A社は、Webマーケティングを支援する従業員数40名の企業である。A社では、現在、Webマーケティング分析システム(以下、Wシステムという)をWebアプリケーションとして独自に開発し、クラウドサービス事業者S社のクラウドサービス上で顧客にサービスとして提供している。Wシステムでは、A社独自の分析アルゴリズムを用いて、顧客のWebサイトを分析する。顧客の評価は高く、販売も好調である。
〔Wシステムの概要〕
Wシステムの開発は、役員T氏とシステム担当のK氏が行っている。T氏がアルゴリズムなどの基本的な仕様を決め、K氏が、Java、サーブレットや開発フレームワークなどを用いて開発している。また、ブラウザ側での機能性向上のためにJavaScriptも用いている。開発はK氏が管理するPC(以下、開発用PCという)上で行い、完成したプログラムをシステム管理者のF氏が本番システムにデプロイし、運用している。
Wシステムの画面構成は、次のようになっている。
・総ページ数は8である。
・“ログインページ”で利用者を認証し、認証が成功すると、“ダッシュボードページへ遷移する。
・“ダッシュボードページ”からは、“分析キーワード入力ページ”などへ遷移できる。
Wシステムのシンプルなページの構成は、顧客にも好評である。
〔Wシステムの実装に関する弱性〕
A社では、Wシステムのセキュリティ検査を、あらかじめ定められた手順に従いK氏がブラウザを用いて手動で実施している。しかし、昨今の他社のセキュリティインシデント増加を受け、念のために、先月実施した社内のセキュリティ検査とは別に、今月になり初めて、外部の専門家にセキュリティ検査を依頼することにした。
そこで、セキュリティ専門会社L社の情報処理安全確保支援士であるN氏が、Wシステムのセキュリティ検査を担当することになった。
まず、N氏が脆弱性検査ツールを使って本番システムを検査したところ、図1のJavaコードで書かれたサーブレットSearchServletに、SQLインジェクション脆弱性及びクロスサイトスクリプティング(以下、XSSという)脆弱性があることが判明した。図2は、図1のSearchServletを呼び出すHTMLコードである。
続いてN氏が本番システムのソースコードを確認し、次の指摘をした。
・SQLインジェクション脆弱性への対処としては、図1のア行目からイ行目までを①適切なコードに置き換える必要がある。
・XSS脆弱性への対処としては、XSS脆弱性を招く可能性の否定できない箇所について、HTML形式での出力時に処理するよう改修することとする。
今回指摘された脆弱性は、検査すべき項目の中に含まれており、K氏によるブラウザを用いた手動のセキュリティ検査によって発見され、開発用PC上のコードでは先月に修正されていた。しかし、K氏からファイルを受け取ったF氏が、本番システムに修正版をデプロイし忘れたので、本番システムに脆弱性が残存したままとなっていた。


〔Wシステムの設計に関する脆弱性〕
以前のWシステムは、ログイン状態で30分間操作しないと、サーバ側で自動的にログアウトする仕様であった。自動的にログアウトした場合、ログアウト直前のページを閲覧するには、再度ログインをして、ダッシュボードページから所望のページを選択する必要があるので、不便だとの指摘が顧客からあった。これを改善するため、自動的にログアウトした場合に、ログアウト直前のページの閲覧を試みると、一旦はログインページに遷移するが、認証が成功すると、閲覧を試みたページへリダイレクトする機能(以下、リダイレクタ機能という)を導入した。例えば、WシステムのURLである https://w-system.a-sha.jp/ で動作するWebアプリケーションにおいて、Wシステムにログインしていない状態で、https://w-system.a-sha.jp/dashboard.jsp というURLにアクセスすると、図3のように生成されたURLへリダイレクトされる。

認証用サーブレット LoginServlet で認証が成功すると、https://w-system.a-sha.jp/dashboard.jsp へリダイレクトされる。
リダイレクト機能を含めてWシステムの設計に関して検査を実施したところ、N氏から幾つかの指摘があった。主な指摘は次の3点であった。
指摘1:Wシステムの認証後のリダイレクタ機能は、オープンリダイレクタの問題を招く。修正する必要がある。
指摘2:WシステムからのCookie発行の際、TLS通信時だけCookieをブラウザから送信するa属性を設定する必要がある。
指摘3:JavaScriptからCookieを操作できないようにするb属性を設定する方がよい。
K氏は、指摘1に対しては、Wシステムの特性を考慮して、②ホワイトリスト方式によるリダイレクタ機能を採用することにした。指摘2と指摘3については、N氏の指摘どおりに改修することにした。
〔脆弱性対策の強化〕
脆弱性が残存した原因も踏まえ、脆弱性対策の強化として、次のとおり提案と指摘をN氏は行った。
・変更管理プロセスを改善すべきである。
・③脆弱性検査手順を改善すべきである。
・K氏によるブラウザを用いた検査には問題がある。WシステムにXSS脆弱性があったとして、適当な検査用文字列を入力しても、④一部のブラウザではXSS攻撃の試みを完遂できないことがある。
・S社のクラウド型WAFサービス(以下、Sサービスという)を導入することを推奨する。Sサービスでは、Webシステムに脆弱性が発見された際、短時間で適切なシグネチャがWAFに追加される。したがって、Sサービスを利用していれば、WAFを利用せずにWシステムを改修するケースと比較して、⑤Webアプリケーションサーバへのリスクの低減を期待できる。
A社では、N氏のこれらの提案と指摘を検討し、適切に対処することにした。
設問1:〔Wシステムの実装に関する脆弱性〕について、(1)〜(3)に答えよ。
(1)本文中のア、イに入れる、適切な行番号を答えよ。また、本文中の下線①について、必要な全てのコードを解答群の中から選び、適切な順序に並べ替えて解答欄の左から順に記号で答えよ。
解答群
ア:PreparedStatement pstmt = conn.prepareStatement(sql);
イ:pstmt.setString(1, cname);
ウ:ResultSet rs = pstmt.executeQuery();
エ:ResultSet rs = pstmt.executeQuery(sql);
オ:String sql = ”SELECT * FROM companylist WHERE cname = '” + cname + ”'”;
力:String sql = ”SELEC * FROM companylist WHERE cname = ?”;
模範解答
ア:9
イ:11
必要な全てのコード:カ、ア、イ、ウ
解説
解答の論理構成
- 問題文では、SQLインジェクション脆弱性を除去するために
“図1のア行目からイ行目までを①適切なコードに置き換える必要がある”
と明記されています。 - Statement で文字列連結を用いて SQL を組み立てている箇所を置き換えるのが本質なので、conn を初期化した直後から Statement を生成する直前までの範囲がターゲットになります。行番号は図1で try { の直後に当たる “9” 行目から Statement stmt = ... の “11” 行目までです。
よって
ア=「9」、イ=「11」。 - 置き換えるコードは、プリペアドステートメントを使い、プレースホルダへパラメタを安全にバインドする形式でなければなりません。解答群を見ると
・カ:String sql = "SELEC * FROM companylist WHERE cname = ?"
・ア:PreparedStatement pstmt = conn.prepareStatement(sql);
・イ:pstmt.setString(1, cname);
・ウ:ResultSet rs = pstmt.executeQuery();
が順に “SQL 文定義 → プリペアドステートメント生成 → プレースホルダへ値設定 → 実行” という定石的な流れになります。
以上から、①に入る全コードは「カ、ア、イ、ウ」の順です。
誤りやすいポイント
- 行番号を数える際に “コメント行” や “空白行” を含めてしまい、実際の 9 行目・11 行目とずれてしまうケースが多発します。
- 解答群「エ」は executeQuery(sql) と再び文字列を渡しているため、PreparedStatement の利点が失われることに気づかず選びがちです。
- 「ア→イ→ウ」だけで完結すると誤認し、プレースホルダを含む SQL 文(カ)を忘れるパターンも典型的な失点原因です。
FAQ
Q: プリペアドステートメントを使えば SQL インジェクションは完全に防げますか?
A: 入力値が正しくパラメタバインドされる限り、クエリに対するインジェクションは実質的に防止できます。ただし動的に列名やテーブル名を組み立てる場合など、バインドできない部分が残ると再度リスクが生じます。
A: 入力値が正しくパラメタバインドされる限り、クエリに対するインジェクションは実質的に防止できます。ただし動的に列名やテーブル名を組み立てる場合など、バインドできない部分が残ると再度リスクが生じます。
Q: setString 以外の型を使うケースではどうすれば良いですか?
A: プレースホルダに割り当てる値の型に応じて setInt、setDate など対応するメソッドを使用します。型を合わせないと実行時例外や意図しない変換が起こるため注意が必要です。
A: プレースホルダに割り当てる値の型に応じて setInt、setDate など対応するメソッドを使用します。型を合わせないと実行時例外や意図しない変換が起こるため注意が必要です。
Q: 文字列連結による SQL 組み立てを静的解析ツールで検出できますか?
A: 近年の静的解析ツールは Statement 利用の有無や " + " 連結パターンを検出し、警告を出す機能を備えています。開発工程に組み込むことで早期に脆弱性を洗い出すことが可能です。
A: 近年の静的解析ツールは Statement 利用の有無や " + " 連結パターンを検出し、警告を出す機能を備えています。開発工程に組み込むことで早期に脆弱性を洗い出すことが可能です。
関連キーワード: SQLインジェクション、プリペアドステートメント、パラメタバインド、静的解析、バリデーション
設問1:〔Wシステムの実装に関する脆弱性〕について、(1)〜(3)に答えよ。
(2)図1には、XSS脆弱性を招く可能性を否定できないコードがある。N氏の指摘に従い、改修すべき行番号を全て答えよ。
模範解答
21、22、23
解説
解答の論理構成
- XSS は「利用者の入力値や DB に保存された値を、そのまま HTML に埋め込んでブラウザへ返す」ことで発生します。
- N氏は「XSS脆弱性を招く可能性の否定できない箇所について、HTML形式での出力時に処理するよう改修」と指摘しています。
- 図1では out.println で HTML を生成しており、次の行が該当します。
- 行番号“21” out.println("キーワードアクセス売上げ");
- 行番号“22” while (rs.next()) { ※以降のセル出力をループさせる入口
- 行番号“23” out.println("" + rs.getString(1));
- “21”は静的文字列ですが、XSS の混入箇所(行“23”以降)を囲む tr・td タグを生成しているため、ここからエスケープ処理を挿入しなければ全体の対処が不完全になります。
- よって、改修すべき行番号は「21、22、23」です。
誤りやすいポイント
- 「DB に保存済みなら安全」と思い込み rs.getString() を無条件で出力してしまう。
- while (rs.next()) の行を対象外と勘違いし、XSS 対策コードをループの内側だけに入れてしまう。
- 固定文字列だけの行は安全と判断し、“21” を除外してしまう。タグ生成行の直後に未エスケープ値が入る場合、同じ行でまとめて修正するのが一般的です。
FAQ
Q: なぜ out.println を使うと XSS が発生しやすいのですか?
A: 文字列連結で HTML を組み立てるため、エスケープ処理を忘れると利用者入力がそのままスクリプトとして解釈されるからです。
A: 文字列連結で HTML を組み立てるため、エスケープ処理を忘れると利用者入力がそのままスクリプトとして解釈されるからです。
Q: PreparedStatement に置き換えれば XSS も防げますか?
A: いいえ。PreparedStatement は SQLインジェクション対策であり、ブラウザに返す HTML には影響しません。XSS にはエスケープや Content Security Policy が必要です。
A: いいえ。PreparedStatement は SQLインジェクション対策であり、ブラウザに返す HTML には影響しません。XSS にはエスケープや Content Security Policy が必要です。
Q: ループ外のヘッダ行“21”も改修対象になる理由は?
A: 対処コード(エスケープ関数呼び出しなど)を追加する際に、ループ入口より前から一貫して適用する方が漏れを防げるためです。
A: 対処コード(エスケープ関数呼び出しなど)を追加する際に、ループ入口より前から一貫して適用する方が漏れを防げるためです。
関連キーワード: XSS, サニタイズ、HTMLエスケープ、Javaサーブレット、out.println
設問1:〔Wシステムの実装に関する脆弱性〕について、(1)〜(3)に答えよ。
(3)XSS脆弱性に対する修正を、N氏の指摘に従い、解答群の中から選び、記号で答えよ。
解答群
ア:CSRF対策トークンを使う。
イ:Refererヘッダの値のURLのドメイン名がWシステムのものであることを確認する。
ウ:出力時に<, >, &, ”, 'の各文字をエスケープする。
エ:同一生成元ポリシを適用する。
オ:バインド機能を使う。
模範解答
ウ
解説
解答の論理構成
- 【問題文】には
・「XSS脆弱性への対処としては、…HTML形式での出力時に処理するよう改修することとする。」
と記載されています。 - XSSはブラウザにスクリプトを注入させる攻撃なので、サーバ側で生成する HTML に危険文字がそのまま混入しないよう「出力時」にエスケープ処理を行うことが王道対策です。
- 解答群を確認すると、文字実体参照(<、>、&、"、' など)に置き換える対策を示しているのは
「ウ:出力時に<、>、&、”、'の各文字をエスケープする。」
だけです。 - 以上より、N氏の指摘と合致するのは「ウ」であると論理的に導けます。
誤りやすいポイント
- 「オ:バインド機能を使う。」は SQL インジェクション対策の手法であり、XSSとは目的が異なります。
- 「ア:CSRF対策トークンを使う。」は利用者の意図しないリクエスト送信を防ぐ技術で、スクリプト埋め込みは防げません。
- HTML 出力時のエスケープは、必ず“サーバ側で生成するすべての箇所”に適用する必要があります。テーブルの だけでなく、
- same-origin policy(解答群エ)や Referer チェック(解答群イ)は補助的な安全策に過ぎず、根本的にタグ混入を防ぐ仕組みではありません。
FAQ
Q: HTML エスケープと URL エンコードは同じですか
A: いいえ。HTML エスケープはタグや属性中に混入する制御文字を無害化し、URL エンコードは HTTP パラメータとして安全に送るための変換です。用途が異なります。
A: いいえ。HTML エスケープはタグや属性中に混入する制御文字を無害化し、URL エンコードは HTTP パラメータとして安全に送るための変換です。用途が異なります。
Q: 文字をエスケープすれば
Q: JavaScript で出力を組み立てる際の注意点は
A: DOM 操作に innerHTML を使うと再び XSS の入口になります。安全に扱うには textContent を用いるか、テンプレートリテラルに直接ユーザ入力を埋め込まない設計が推奨されます。
A: DOM 操作に innerHTML を使うと再び XSS の入口になります。安全に扱うには textContent を用いるか、テンプレートリテラルに直接ユーザ入力を埋め込まない設計が推奨されます。
関連キーワード: XSS, エスケープ、サニタイズ、HTML エンコード
設問2:〔Wシステムの設計に関する脆弱性〕について(1)、(2)に答えよ。
(1)本文中のa、bに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群
ア:Expires
イ:HttpOnly
ウ:Max-Age
エ:Secure
オ:Secured
模範解答
a:エ
b:イ
解説
解答の論理構成
- 問題文の確認
- 「指摘2:WシステムからのCookie発行の際、TLS通信時だけCookieをブラウザから送信するa属性を設定する必要がある。」
- 「指摘3:JavaScriptからCookieを操作できないようにするb属性を設定する方がよい。」
- TLS通信時だけ送信させる属性
- Cookie に付与することで “HTTPS での通信時のみブラウザが送信する” 挙動を実現するのは Secure 属性です。
- 解答群で該当するのは「エ:Secure」であり、これが a に入ります。
- JavaScript からのアクセスを禁止する属性
- Cookie が XSS などで読み取られるのを防ぎ、クライアント側スクリプトから参照できなくするのは HttpOnly 属性です。
- 解答群で該当するのは「イ:HttpOnly」であり、これが b に入ります。
- 以上より
- a = 「エ」
- b = 「イ」
誤りやすいポイント
- 「TLS通信時だけ」のキーワードで Secure を想起しにくく、似た表記の「オ:Secured」を選択してしまう。
- HttpOnly は “HTTP だけで有効になる” と誤解し、サーバ接続プロトコル限定の属性だと思い込む。
- Expires や Max-Age は Cookie の有効期限を制御する属性であり、通信経路や JavaScript からの参照可否とは無関係である点を取り違える。
FAQ
Q: Secure 属性を付けても HTTP でアクセスしたときは Cookie が全く送られないのですか?
A: はい。Secure が付いた Cookie は HTTPS でのリクエストにのみ同封され、平文 HTTP ではブラウザが送信しません。
A: はい。Secure が付いた Cookie は HTTPS でのリクエストにのみ同封され、平文 HTTP ではブラウザが送信しません。
Q: HttpOnly を設定しても XSS が完全に防げるわけではないのでは?
A: そのとおりです。HttpOnly は Cookie 盗用を難しくしますが、HTML 埋め込み型 XSS で画面改ざんや CSRF トークン窃取などは依然として可能です。総合的な入力値検証とエスケープが必要です。
A: そのとおりです。HttpOnly は Cookie 盗用を難しくしますが、HTML 埋め込み型 XSS で画面改ざんや CSRF トークン窃取などは依然として可能です。総合的な入力値検証とエスケープが必要です。
Q: Secure と HttpOnly は同時に付けられますか?
A: 付けられます。Set-Cookie ヘッダで両方を指定すれば、HTTPS でのみ送信され、かつ JavaScript からは参照できない安全性の高い Cookie になります。
A: 付けられます。Set-Cookie ヘッダで両方を指定すれば、HTTPS でのみ送信され、かつ JavaScript からは参照できない安全性の高い Cookie になります。
関連キーワード: Cookie属性、Secure, HttpOnly, TLS, XSS
設問2:〔Wシステムの設計に関する脆弱性〕について(1)、(2)に答えよ。
(2)本文中の下線②について、Wシステムで採用するホワイトリスト方式の適切な仕様を、40字以内で具体的に述べよ。
模範解答
認証後のリダイレクト先の URL を、Wシステムの FQDNのものに限定する。
解説
解答の論理構成
- 【問題文】には「指摘1:Wシステムの認証後のリダイレクタ機能は、オープンリダイレクタの問題を招く。修正する必要がある。」とあり、任意サイトへ転送されるリスクが指摘されています。
- 同じく【問題文】には「K氏は、指摘1に対しては、②ホワイトリスト方式によるリダイレクタ機能を採用することにした。」とあり、転送先を事前に許可したものに限定する方針が明示されています。
- オープンリダイレクトは、攻撃者が自ドメイン外の URL を設定できることが原因です。したがってホワイトリストには自システムが正規に用いる URL だけを登録するのが筋となります。
- W システムの正規 URL は【問題文】に「WシステムのURLである https://w-system.a-sha.jp/」とはっきり書かれており、この FQDN 以外を転送先として許可する必要はありません。
- 以上より、「認証後のリダイレクト先の URL を、Wシステムの FQDN のものに限定する」という仕様が、ホワイトリスト方式の具体策として適切であると結論付けられます。
誤りやすいポイント
- 複数サブパスを列挙するブラックリスト方式と混同し、危険 URL を除外する方向で考えてしまう。
- http と https の区別を忘れ、同じ FQDN でも暗号化されていない転送を許可してしまう。
- CDNs や外部 API など別ドメイン利用時の転送と混同して、余計な FQDN までホワイトリストに入れてしまう。
FAQ
Q: サブドメイン(例:api.w-system.a-sha.jp)へのリダイレクトは許可してよいですか?
A: サブドメインを利用する必要がある場合は、w-system.a-sha.jp のワイルドカード指定をホワイトリストに追加し、正式に管理下にあることを確認してから許可します。
A: サブドメインを利用する必要がある場合は、w-system.a-sha.jp のワイルドカード指定をホワイトリストに追加し、正式に管理下にあることを確認してから許可します。
Q: 動的に生成したクエリパラメータは検証不要ですか?
A: パス部分がホワイトリストの FQDN であっても、クエリパラメータで別サイトへメタリダイレクトするケースがあります。パラメータも入力バリデーション・エンコードを行うべきです。
A: パス部分がホワイトリストの FQDN であっても、クエリパラメータで別サイトへメタリダイレクトするケースがあります。パラメータも入力バリデーション・エンコードを行うべきです。
Q: リファラチェックだけでオープンリダイレクト対策になりますか?
A: リファラはユーザが改変できるため完全な対策にはなりません。サーバ側でリダイレクト先 URL の FQDN をホワイトリスト照合する方が確実です。
A: リファラはユーザが改変できるため完全な対策にはなりません。サーバ側でリダイレクト先 URL の FQDN をホワイトリスト照合する方が確実です。
関連キーワード: オープンリダイレクタ、ホワイトリスト、FQDN, URL検証、入力バリデーション
設問3:〔脆弱性対策の強化〕について、(1)〜(3)に答えよ。
(1)本文中の下線③について、どのように改善すべきか。改善された検査手順を30字以内で述べよ。
模範解答
セキュリティ検査を本番システムに対し行うこと
解説
解答の論理構成
- 【問題文】では、修正版は開発用PCにはあったものの「K氏からファイルを受け取ったF氏が、本番システムに修正版をデプロイし忘れたので、本番システムに脆弱性が残存したままとなっていた」と記載されています。
- つまり従来の検査対象は開発環境に限定されており、本番環境へ反映漏れがあっても気付けませんでした。
- その結果、N氏が「脆弱性検査手順を改善すべきである」と提案しています。
- 改善すべき点は、リリース後の“実際に顧客が利用する環境”を直接確認し、デプロイ漏れや設定ミスを即時検知できるようにすることです。
- よって、検査手順の改善は「セキュリティ検査を本番システムに対し行うこと」となります。
誤りやすいポイント
- 開発環境での検査強化と誤解し、検査ツールの追加導入や手動項目の充実と答えてしまう。
- 「ステージング環境での検査」と答え、実際の本番環境検査を外してしまう。
- 変更管理プロセス改善(別提案)と混同し、レビュー体制や承認フローの記述に寄せてしまう。
FAQ
Q: なぜステージング環境では不十分なのですか?
A: 本番へのデプロイ漏れや設定差異が原因で脆弱性が残存したため、本番環境そのものを対象にしないと同種の事故を防げないからです。
A: 本番へのデプロイ漏れや設定差異が原因で脆弱性が残存したため、本番環境そのものを対象にしないと同種の事故を防げないからです。
Q: 本番検査はサービス停止を招きませんか?
A: ツールの非破壊モードや負荷分散で時間帯を選ぶことで、可用性を保ちながら実施可能です。
A: ツールの非破壊モードや負荷分散で時間帯を選ぶことで、可用性を保ちながら実施可能です。
Q: 検査を外部委託すれば本番検査は不要ですか?
A: 委託の有無に関係なく、本番環境を検査対象に含める運用を組織の手順として固定化することが重要です。
A: 委託の有無に関係なく、本番環境を検査対象に含める運用を組織の手順として固定化することが重要です。
関連キーワード: 本番環境、デプロイ、脆弱性検査、変更管理
設問3:〔脆弱性対策の強化〕について、(1)〜(3)に答えよ。
(2)本文中の下線④について、XSS攻撃の試みを完遂できないことがある理由を30字以内で述べよ。
模範解答
ブラウザによっては XSS 攻撃を遮断する機能をもつから
解説
解答の論理構成
- 【問題文】では、K氏が「ブラウザを用いた手動のセキュリティ検査」を実施したとあります。
- その検査で見落とした理由について、N氏は「④一部のブラウザではXSS攻撃の試みを完遂できないことがある」と指摘しています。
- 近年、多くの主要ブラウザには XSS Filter や XSS Auditor などと呼ばれる機能が実装されており、疑わしいスクリプトを自動的に除去・無効化します。
- この機能が働くと、攻撃用に入力した
- したがって、「一部のブラウザでは XSS 攻撃自体をブラウザ側が遮断するため、攻撃を再現できず検証に失敗する」という説明が成り立ちます。
誤りやすいポイント
- 「検査用文字列が不適切だった」と勘違いし、ブラウザ固有機能の存在を見逃す。
- ブラウザの開発者ツールでエラーが見えない=安全、と早合点する。
- WAF やサーバ側フィルタと混同し、クライアント側の防御機構を忘れる。
FAQ
Q: すべてのブラウザが XSS を自動遮断しますか?
A: いいえ。実装の有無や挙動はブラウザの種類・バージョンで異なります。
A: いいえ。実装の有無や挙動はブラウザの種類・バージョンで異なります。
Q: ブラウザが遮断してくれるなら、サーバ側対策は不要ですか?
A: 不要ではありません。攻撃者は別のブラウザやツールを使うため、サーバ側で確実に無害化する必要があります。
A: 不要ではありません。攻撃者は別のブラウザやツールを使うため、サーバ側で確実に無害化する必要があります。
Q: 手動検査時にブラウザ依存の影響を減らすには?
A: 自動化ツールや複数ブラウザでの確認、もしくはヘッドレスブラウザ+スクリプト無効化モードなどを併用します。
A: 自動化ツールや複数ブラウザでの確認、もしくはヘッドレスブラウザ+スクリプト無効化モードなどを併用します。
関連キーワード: XSS, ブラウザ、フィルタリング、脆弱性検査
設問3:〔脆弱性対策の強化〕について、(1)〜(3)に答えよ。
(3)本文中の下線⑤について、低減できるリスクを50字以内で述べよ。
模範解答
Wシステムで当該脆弱性に対処する前に始まる攻撃によって、セキュリティ侵害されてしまうリスク
解説
解答の論理構成
- 問題文では、クラウド型WAFサービスである「Sサービス」について
「Sサービスでは、Webシステムに脆弱性が発見された際、短時間で適切なシグネチャがWAFに追加される」と記載しています。 - さらに「WAFを利用せずにWシステムを改修するケースと比較して、⑤Webアプリケーションサーバへのリスクの低減を期待できる」と述べています。
- つまり、WAFのシグネチャ追加が素早く行われれば、開発側で脆弱性を修正してデプロイするまでの“空白期間”にも攻撃をブロックできます。
- この空白期間に攻撃が成功すれば「Webアプリケーションサーバへのセキュリティ侵害」が発生し得ます。
- したがって⑤で低減できるリスクは、脆弱性修正前に実被害が生じるリスクであり、模範解答は
「Wシステムで当該脆弱性に対処する前に始まる攻撃によって、セキュリティ侵害されてしまうリスク」
となります。
誤りやすいポイント
- 「WAFを導入すれば恒久的にコード修正が不要になる」と誤解しやすいですが、WAFはあくまで暫定的な防護策です。
- ⑤が指すリスクを「SQLインジェクションそのものを防ぐリスク」など個別攻撃名で答えると範囲が限定され減点対象になります。
- Sサービスの効果を「性能劣化の防止」や「通信経費の削減」と勘違いすると設問の趣旨から外れます。
FAQ
Q: ⑥ではなく⑤が問われている理由は何ですか?
A: ⑤は「WAF導入による具体的な効果」を示す箇所で、設問が求める“低減されるリスク”を直接説明しているためです。
A: ⑤は「WAF導入による具体的な効果」を示す箇所で、設問が求める“低減されるリスク”を直接説明しているためです。
Q: 回答に「ゼロデイ攻撃」という語を入れても良いですか?
A: 趣旨は合っていますが、問題文に無い固有名詞を盛り込むと主語が広がり過ぎる恐れがあるため避ける方が無難です。
A: 趣旨は合っていますが、問題文に無い固有名詞を盛り込むと主語が広がり過ぎる恐れがあるため避ける方が無難です。
Q: WAFだけで完全に安全になるのでは?
A: いいえ。WAFは迅速な“仮想パッチ”として有効ですが、恒久対策としてはコード修正と運用プロセス改善が不可欠です。
A: いいえ。WAFは迅速な“仮想パッチ”として有効ですが、恒久対策としてはコード修正と運用プロセス改善が不可欠です。
関連キーワード: WAF, シグネチャ、仮想パッチ、オンライン防御


