情報セキュリティの基礎
掲示板のWebアプリケーションで、利用者が投稿した文章の中のスクリプトが、ほかの閲覧者のブラウザで実行されてしまう脆弱性があった。この脆弱性の名前と、根本的な対策の組み合わせとして正しいものはどれか。
- ASQLインジェクション。データベースへの接続に使うパスワードを長くする
- Bクロスサイトスクリプティング(XSS)。投稿された文章をHTMLとして出力するときに、< や > などの特別な意味をもつ文字をエスケープする
- Cクロスサイトスクリプティング(XSS)。サーバとブラウザの間の通信をHTTPSで暗号化する
答えと解説を見る
正解:B. クロスサイトスクリプティング(XSS)。投稿された文章をHTMLとして出力するときに、< や > などの特別な意味をもつ文字をエスケープする
クロスサイトスクリプティング(XSS)は、Webアプリケーションが、利用者の入力をそのままHTMLの中に出力するために、入力に含まれたスクリプトがページの一部として閲覧者のブラウザで実行されてしまう脆弱性です。スクリプトは、そのサイトのページとして動くので、閲覧者のセッションの情報(Cookie)を盗んだり、偽の入力欄を表示したりするおそれがあります。根本的な対策は、出力する場所に応じて、< や > や & や引用符のような特別な意味をもつ文字をエスケープ(例えば < を < に変換)して、ただの文字として表示させることです。補助的な対策として、CookieにHttpOnly属性を付けてスクリプトから読めないようにしたり、コンテンツセキュリティポリシーで実行できるスクリプトを制限したりします。HTTPSは通信路を守るもので、正規のページに埋め込まれたスクリプトの実行は防げません。
- A. スクリプトがブラウザで実行されるのはSQLインジェクションではありません。また、接続のパスワードを長くしても関係がありません。
- B. 正しい。入力をそのまま出力したことが原因なので、出力のときのエスケープが根本的な対策です。
- C. 名前は正しいですが、HTTPSは通信路を守るもので、正規のページに埋め込まれたスクリプトの実行は防げません。