ITパスポート 2026年 問95
問題文
SQLインジェクションの対策などで用いられ、処理の誤動作を招かないように、利用者がWebサイトに入力した内容に含まれる有害な文字列を無害な文字列に置き換えることを何と呼ぶか。
選択肢
ア:MACアドレスフィルタリング
イ:サニタイジング(正解)
ウ:ストライピング
エ:ソーシャルエンジニアリング
🔒 解説は解答すると表示されます
SQLインジェクション対策で入力中の有害文字列を無害化する処理は何と呼ぶか【ITパスポート 解説】
正解の理由
問題文は「利用者がWebサイトに入力した内容に含まれる有害な文字列を無害な文字列に置き換える」と説明しています。これを指す言葉は「サニタイジング」です。サニタイジング(英: sanitizing)は、入力された文字列の中の危険な記号や命令を安全な形に変換して、SQLインジェクション(SQL:Structured Query Language=データベース操作言語に不正な命令を注入する攻撃)やXSS(クロスサイトスクリプティング:Webページに悪いスクリプトを埋め込む攻撃)などの誤動作・攻撃を防ぐ処置です。したがって、選択肢の中では イ が正しいです。
解法ステップ
- 問題文のキーワードを見つける:SQLインジェクション、利用者が入力、含まれる有害な文字列を無害な文字列に「置き換える」。
- 各選択肢の意味を短く思い出す:
- MACアドレスフィルタリング:ネットワーク機器で接続許可を制限する技術。
- サニタイジング:入力を安全な文字列に変換する処理。
- ストライピング:RAIDなどでデータを分散配置する用語(※問題文と合わない)。
- ソーシャルエンジニアリング:人をだまして情報を取る手口。
- 「置き換える」に合致する語を選ぶ:イ(サニタイジング)。
- 配置された文脈(SQLインジェクション対策)とも照らして確定する。
選択肢別の誤答解説
-
ア: MACアドレスフィルタリング
ルーターやスイッチで機器の識別子(MACアドレス)によって接続可否を決める方法です。入力文字列の変換とは関係ありません。 -
イ: サニタイジング
正解です。入力中の危険な文字列を無害なものに置き換えます。例:HTMLで危険な「<」を「<」に変換する、SQLで問題になる引用符をエスケープするなど。 -
ウ: ストライピング
「ストライピング(striping)」は主にRAIDなどでデータを複数のディスクに分散して書き込むことを指します。一部の人が「stripping(ストリッピング)」=文字を取り除くと混同することがありますが、問題文の「無害な文字列に置き換える」とは異なります。 -
エ: ソーシャルエンジニアリング
人間の心理を利用して情報を引き出す攻撃手法です。技術的な入力文字列の変換を指す言葉ではありません。
よくある誤解
-
サニタイジングとバリデーション(入力検証)は同じ?
- 違います。バリデーションは「入力がルールに合っているか確認する」処理です。サニタイジングは「危険な部分を安全に変換する」処理です。両方行うのが望ましいです。
-
サニタイジングだけすれば安全?
- 部分的に役立ちますが、万能ではありません。特にSQL対策では、サニタイジングよりもプリペアドステートメント(パラメータ化クエリ)を使う方が堅牢です。
-
エスケープ(escaping)とサニタイジングは同じ?
- 似ていますが使い分けます。エスケープは特定の文字を前にバックスラッシュなどを付けて中立化する方法、サニタイジングは置き換えや除去など広い意味での無害化処理を指します。
補足コラム
実務では「入力の検証(validation)→ 無害化(sanitizing/escaping)→ 出力時の文脈に応じたエンコード(encoding)」の順で対策します。特にSQL対策のベストプラクティスは「プリペアドステートメント(prepared statements、パラメータ化クエリ)」を使うことです。簡単なコード例を示します。
- Python(sqlite3)での安全なSQL(パラメータ化)
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
# ユーザ入力はプレースホルダで渡す(文字列を直接連結しない)
username = input("ユーザ名: ")
c.execute("SELECT * FROM users WHERE name = ?", (username,))
- PHPでHTML出力時に危険な記号を無害化(サニタイジング)
<?php
$user_input = $_GET['comment'] ?? '';
// HTMLとして出力する前に特殊文字を変換
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>
用途に応じて、XSS対策ではHTMLエンコード、SQL対策ではパラメータ化、ファイル名などではホワイトリスト検査、など使い分けが必要です。
FAQ
Q1: サニタイジングはどのタイミングで行うべきですか?
A1: 入力の受け取り時に最低限の検査をし、出力する際は出力先の文脈(HTML、JavaScript、SQL、ファイル名など)に合わせて適切な無害化(エンコードやエスケープ)を行います。
A1: 入力の受け取り時に最低限の検査をし、出力する際は出力先の文脈(HTML、JavaScript、SQL、ファイル名など)に合わせて適切な無害化(エンコードやエスケープ)を行います。
Q2: サニタイジングだけでSQLインジェクションは完全に防げますか?
A2: 完全ではありません。より安全な方法はパラメータ化クエリ(プリペアドステートメント)を使用することです。サニタイジングは補助的に使います。
A2: 完全ではありません。より安全な方法はパラメータ化クエリ(プリペアドステートメント)を使用することです。サニタイジングは補助的に使います。
Q3: どんなライブラリや関数を使えば良いですか?
A3: 言語やフレームワークごとに推奨APIがあります。例:PHPはPDOのプリペアドステートメント、JavaはPreparedStatement、Web出力には各言語のHTMLエンコード関数など。OWASP(オープンウェブアプリケーションセキュリティプロジェクト)に実践的なガイドがあります。
A3: 言語やフレームワークごとに推奨APIがあります。例:PHPはPDOのプリペアドステートメント、JavaはPreparedStatement、Web出力には各言語のHTMLエンコード関数など。OWASP(オープンウェブアプリケーションセキュリティプロジェクト)に実践的なガイドがあります。
Q4: サニタイジングとエスケープ、どちらを覚えれば良いですか?
A4: どちらも重要です。用語を区別して、出力先に応じたエスケープ(HTMLエスケープ、JavaScriptエスケープ、SQLパラメータ化など)を行うことを覚えてください。
A4: どちらも重要です。用語を区別して、出力先に応じたエスケープ(HTMLエスケープ、JavaScriptエスケープ、SQLパラメータ化など)を行うことを覚えてください。
関連キーワード: サニタイジング, SQLインジェクション対策, 入力検証, エスケープ, プリペアドステートメント, XSS対策, バリデーション, エンコード, OWASP, Webセキュリティ

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

