正答1
解説
正解は1です。
SQLインジェクションは、入力欄に不正なSQL文の断片を入力し、データベースに意図しない操作をさせる攻撃です。
入力値に含まれる「'」(シングルクォーテーション)などの記号が、SQL文の一部として解釈されることが原因です。
【選択肢別解説】
1:○ 特別な意味をもつ文字をエスケープ処理したり、プレースホルダ(バインド機構)を使ったりすると、入力値がSQL文の構文として解釈されなくなります。
これがSQLインジェクションの根本的な対策です。
2:× HTMLタグを無害な文字列に置き換えるのは、クロスサイトスクリプティングの対策です。
SQL文の解釈には効果がありません。
3:× 上位ディレクトリを指す「../」を受け付けないのは、ディレクトリトラバーサルの対策です。
4:× 入力の長さを制限するのは、バッファオーバフローなどへの対策です。
短い入力でもSQLインジェクションは成立するので、根本的な対策になりません。
【ポイント】
攻撃と対策の組合せは、SQLインジェクションがエスケープとプレースホルダ、クロスサイトスクリプティングがHTMLのエスケープ、ディレクトリトラバーサルがパス名の検査です。