令和6年試験問題 [科目A]問10
問10解説へ
SQLインジェクションの対策として,有効なものはどれか。
- URLをWebページに出力するときは,"http://"や"https://"で始まるURLだけを許可する。
- 外部からのパラメータでWebサーバ内のファイル名を直接指定しない。
- スタイルシートを任意のWebサイトから取り込めるようにしない。
- プレースホルダを使って命令文を組み立てる。
正解 エ問題へ
広告
解説
- XSS(クロスサイトスクリプティング)の対策です。URLには"javascript:"で始まるJavaScriptコードを記述することができます。例えば、Webブラウザのアドレスバーにjavascript:alert('XSS');のコードを入力してアクセスすると、メッセージボックスが表示されます。これがWebページのリンク先として埋め込まれると、リンクをクリックした際に悪意のあるコードが実行され、XSS攻撃の被害が発生するおそれがあります。
- ディレクトリトラバーサルの対策です。外部からの入力に基づいてファイル名指定している場合、攻撃者から任意のファイルを指定され、隠しているファイル内容が見られるなど意図しない処理が行われるおそれがあります。
- CSSインジェクションの対策です。スタイルシートの記述をWebvページに埋め込まれることにより、Webページのコンテンツの非表示や任意の要素の追加、属性値の情報を外部から取得されるなどのおそれがあります。
- 正しい。プレースホルダは、SQL文の中でユーザーの入力値を使用する部分に置かれる記号のことです。その記号の部分には、実行時にSQL文の特殊文字がエスケープされた値が割り当てられるので、不正なSQL文の実行を防ぐことができます。SQL文の組み立ては全てプレースホルダで実装するのが、SQLインジェクションへの根本的な対策となります。//PHPにおけるプレースホルダの一例
$uid = $_POST["userid"];
$sql = 'SELECT * FROM USER WHERE uid = ?' //?がプレースホルダ
$pdo = new PDO($dbh, $user, $password);
$stmt = $pdo->prepare($sql);
$stmt->execute([$uid]); //?に値を割り当てて実行
広告