本サイトは広告により収益を得ています

Webセキュリティの基礎(XSS、CSRF、SQLインジェクション対策)

Webセキュリティの基礎(XSS、CSRF、SQLインジェクション対策)

2025年11月10日
フリー検定
広告

目次

現在: 5 / 12

バックエンドエンジニアに関する検定はこちら

面倒な会員登録も不要!すぐに受験!

無料で受験する

Webアプリケーションの安全性を確保することは、バックエンドエンジニアの最も重要な責任の一つです。攻撃者は常にシステムの脆弱性を探しており、不正アクセスや情報漏洩を防ぐためには、主要な攻撃手法とその対策を理解し、実装することが不可欠です。

この章では、Webアプリケーションで特に対策が求められる三大脆弱性とその防御策について解説します。


1. SQLインジェクション(SQL Injection, SQLi)対策

SQLインジェクションは、攻撃者がWebアプリケーションの入力フォームなどを通じて、意図しないSQLコードをデータベースに送り込み、データを不正に操作したり、機密情報を取得したりする攻撃です。

攻撃の仕組み

  • ユーザー入力がそのままSQLクエリ文字列の一部として組み込まれる場合に発生します。

  • 例えば、ログイン時にパスワードの代わりに ’ OR ‘1’ = ‘1 のような文字列を入力することで、本来の認証を迂回させることが可能になります。

主要な対策:プリペアドステートメント

  • プリペアドステートメント(Prepared Statement)またはバインド機構の利用が、最も効果的かつ基本的な対策です。

  • クエリの**構造(テンプレート)入力データ(パラメータ)**を分離してデータベースに送ります。

  • データベースがクエリを解釈する際、入力データを単なる「文字列データ」としてのみ扱い、SQLの「コマンド」として解釈することを防止します。

  • 主要なWebフレームワークやデータベースライブラリは、この機構を標準で提供しています。


2. クロスサイトスクリプティング(Cross-Site Scripting, XSS)対策

XSSは、攻撃者が悪意のあるスクリプト(主にJavaScript)をWebサイトに埋め込み、そのサイトを訪れた他のユーザーのブラウザ上で実行させることで、セッション情報(Cookie)の盗難や、フィッシングなどの被害を引き起こす攻撃です。

攻撃の主な種類

  • 格納型(Persistent XSS): 攻撃スクリプトがサーバーのデータベースなどに恒久的に保存され、アクセスしたすべてのユーザーに影響を与えます。(例: 掲示板への書き込み)

  • 反射型(Reflected XSS): 攻撃スクリプトがURLパラメータなどに含まれ、それがサーバーで処理されずに、エラーメッセージなどとしてユーザーのブラウザに「反射」されて実行されます。

主要な対策:エスケープ処理

  • 出力時のエスケープ処理が最も重要です。

  • ユーザーからの入力やデータベースから取得したデータをHTMLとして表示する際、<>" などの特殊文字を、HTML上で無害な文字(例: <&lt; へ)に変換(エスケープ)します。

  • これにより、ブラウザが悪意のある文字列を単なるテキストとして表示し、スクリプトとして実行することを防ぎます。

  • モダンなテンプレートエンジン(例: Jinja2, Blade, React)は、標準で自動エスケープ機能を備えているため、原則としてこの機能を利用します。


3. クロスサイトリクエストフォージェリ(Cross-Site Request Forgery, CSRF)対策

CSRFは、ユーザーが認証済みのWebサイト(例: 銀行サイト)にログインしている状態で、悪意のある別のサイトを閲覧した際に、そのサイトに仕掛けられた罠によって、意図しないリクエスト(例: ログイン中の銀行口座からの振込リクエスト)を、ユーザーの権限で実行させてしまう攻撃です。

攻撃の仕組み

  • Webブラウザは、リクエスト元のサイトに関係なく、そのドメインのCookie(セッションIDなど)を自動でサーバーに送信してしまう特性を悪用します。

  • サーバーは、Cookieを受け取ると「ログイン済みのユーザーからの正当なリクエスト」と誤認し、処理を実行してしまいます。

主要な対策:CSRFトークン

  • CSRFトークン(ワンタイムトークン)の導入が、最も一般的な対策です。

  • 動作原理:

    1. サーバーが、予測不可能な秘密のトークンを生成し、それをユーザーのセッションと紐付けて保存します。

    2. トークンをフォームの隠しフィールドなどに入れて、クライアントに渡します。

    3. クライアントは、リクエストを送信する際(例: フォーム送信時)、このトークンをリクエストに含めます

    4. サーバーは、リクエストに含まれるトークンと、セッションに保存されているトークンが一致するかを確認します。

  • 攻撃者が外部サイトからリクエストを送る場合、この秘密のトークンを知ることができないため、リクエストはサーバーで拒否されます。


これらの対策は、Webアプリケーションのセキュリティを確保するための基礎であり、実務においては、使用するフレームワークのセキュリティ機能(ミドルウェアなど)を適切に設定し、常に最新のセキュリティ情報に注意を払うことが求められます。

バックエンドエンジニアに関する検定はこちら

面倒な会員登録も不要!すぐに受験!

無料で受験する
広告

検定一覧はこちらから

様々なジャンルの検定から選んで、あなたの知識を試してみましょう。

検定一覧を見る

関連記事

広告