質問: SQLインジェクションについて教えてください。 現在、”基礎からのPHP”という著書でPHPを学んでおります。 【質問】 以下の記述では、banのデータ型であるint以外は受けつけないとあります。 さらに、preg_matchを使い攻撃に対して防御しているのがわかります。 しかし、 今回私が作っているサイトが、フォームから数字ではなく、日本語(varchar) 例) 札幌、東京、神奈川 (ホワイトリストでと考えましたが、これらの単語が2000近くあり現実的ではない??) といった内容を入れる場合どのように記述すれば安全でしょうか。 日本語のインジェクション対策がネット上で見つけれなかったので質問です。 prepare("SELECT * FROM tb2 WHERE ban=:A"); $ps->bindParam(":A", $a); $ps->execute(); if ($ps->rowCount() != 0){ while($i=$ps->fetch()){ print $i[0].$i[1].""; } } } ?>
回答: 上記項番5.3にあるようなプレースホルダを使うのが一般的な方法だと思います。 これは、PHPに限らずたいていの言語においてSQLインジェクション対策で推奨される方法です。