ITパスポート 2016年 春期 問64
問題文
SQLインジェクションの対策などで用いられ、処理の誤動作を招かないように、利用者がWebサイトに入力した内容に含まれる有害な文字列を無害な文字列に置き換えることを何と呼ぶか。
選択肢
ア:サニタイジング(正解)
イ:ストリーミング
ウ:テザリング
エ:リバースエンジニアリング
🔒 解説は解答すると表示されます
有害な入力文字列を無害に置き換える処理の呼称【ITパスポート 解説】
正解の理由
利用者がWebサイトに入力した内容に含まれる有害な文字列を無害な文字列に「置き換える」処理は、サニタイジング(英: sanitizing)と呼びます。サニタイジングは「不純物を取り除いて安全にする」という意味の英単語 sanitize に由来し、ここでは入力値から危険な部分を取り除いたり、安全な表現に変換したりして、SQLインジェクションのような誤動作や攻撃を防ぎます。したがって選択肢の中では ア が正解です。
(補足)SQLインジェクションとは、悪意ある値を入力欄に入れてデータベースに不正な命令を実行させる攻撃のことです。これは「ユーザー入力をそのままSQLに組み込む」ことが原因で起きます。
解法ステップ
- 問題文のキーワードを見つける:「有害な文字列を無害な文字列に置き換える」。
- 各選択肢の意味を思い出す(サニタイジング、ストリーミング、テザリング、リバースエンジニアリング)。
- 「置き換える」という行為と意味が合うのは「サニタイジング」であると判断する。
この問題は用語の意味を問う基本問題です。質問文にある「置き換える」という表現を意識すると選びやすくなります。
選択肢別の誤答解説
-
ア: サニタイジング(正解)
- サニタイジング(英: sanitizing:無害化すること)。入力に含まれる危険な文字・タグ・SQLの断片などを取り除くか安全な形に変換する処理を指します。Webセキュリティ対策で使われる典型的な用語です。
-
イ: ストリーミング
- ストリーミング(英: streaming:継続的にデータを送受信すること)。動画配信や音楽配信で使う言葉で、入力を無害化する意味はありません。
-
ウ: テザリング
- テザリング(英: tethering:スマホの回線を他の機器と共有してインターネット接続を提供すること)。モバイル接続の話で、文字列の無害化とは関係ありません。
-
エ: リバースエンジニアリング
- リバースエンジニアリング(英: reverse engineering:製品・ソフトの構造や動作を解析して設計を明らかにすること)。解析・分解の行為であり、入力値の置き換えとは無関係です。
よくある誤解
-
「サニタイジング=パスワードのハッシュ化や暗号化」と思う誤解
- サニタイジングは入力を無害化する処理です。パスワードのハッシュ化やデータの暗号化は「機密性を保つ」処理で目的が異なります。
-
「エスケーピング(escaping)とサニタイジングは同じ」と考える誤解
- 似ていますが目的と手法が微妙に違います。エスケーピングは特定の文脈(HTMLやSQLなど)で意味を持つ文字を前処理して無害化する操作です。サニタイジングはより広い意味で「危険な内容を取り除く・変換する」ことを指します。どちらも使い分けが重要です。
補足コラム
安全なWebアプリケーションを作るときのポイント(簡単まとめ)
- 入力の検証(バリデーション): 期待する形式かチェックする(例: メールアドレス形式、数字のみなど)。
- エスケーピング(escaping): 出力先に応じた安全な変換をする。例: HTMLに出すなら
<を<に置き換える。 - サニタイジング: 危険なタグや文字列を取り除く、または許可リストでフィルタする。
- SQLにはプレースホルダ(prepared statements)を使う: 直接文字列連結でSQLを作らず、パラメータ化して実行する(これが最も強力な防御の一つ)。
- 原則: 防御は多層に行う(複数の方法を組み合わせる)。
簡単な例(Python):
# HTMLに出力するときのエスケープ例
import html
user_input = '<script>alert("x")</script>'
safe_output = html.escape(user_input) # < と > を < > に変換
print(safe_output) # <script>alert("x")</script>
# SQLでの安全な例(SQLite)
import sqlite3
con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute('CREATE TABLE users(name TEXT)')
name = "O'Reilly" # 危険なアポストロフィを含む例
cur.execute('INSERT INTO users(name) VALUES(?)', (name,)) # プレースホルダを使用
con.commit()
上のように「出力先に応じた処理(HTML用の変換)」と「データベース向けのパラメータ化」は別々の対策ですが、どちらも重要です。
FAQ
Q1: サニタイジングだけで十分ですか?
A1: 場合によりますが、サニタイジングだけでは不十分なことが多いです。入力検証、出力時のエスケーピング、SQLではプレースホルダ(prepared statements)を併用するのが推奨されます。
A1: 場合によりますが、サニタイジングだけでは不十分なことが多いです。入力検証、出力時のエスケーピング、SQLではプレースホルダ(prepared statements)を併用するのが推奨されます。
Q2: エスケーピングとサニタイジング、どちらを優先すべきですか?
A2: 出力先ごとにエスケーピングを必ず行い、サニタイジングは必要に応じて(例: ユーザーが入力したHTMLを表示する場合など)使います。両方を組み合わせるのが安全です。
A2: 出力先ごとにエスケーピングを必ず行い、サニタイジングは必要に応じて(例: ユーザーが入力したHTMLを表示する場合など)使います。両方を組み合わせるのが安全です。
Q3: サニタイジングと入力検証は違いますか?
A3: 違います。入力検証(バリデーション)は「期待する形式か」を確認する行為、サニタイジングは「有害な部分を取り除く・変換する」行為です。両方行うと安全性が高まります。
A3: 違います。入力検証(バリデーション)は「期待する形式か」を確認する行為、サニタイジングは「有害な部分を取り除く・変換する」行為です。両方行うと安全性が高まります。
関連キーワード: サニタイジング、サニタイズ、SQLインジェクション対策、入力検証、エスケーピング、プレースホルダ、prepared statements

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

