サニタイズとエスケープについてすでに質問したことは知っていますが、回答が得られなかった質問があります。
よし、ここまでだ。私がPHPスクリプトを持っていてGET
、ユーザーがそれをmySQLデータベースから入力した場合、エスケープせSELECT
ず、いずれかを使用して、またはHTMLタグを許可した場合、セキュリティ上のリスクは問題になりますかデータベースから選択/検索? 入力は、および(\%_) を使用して既にサニタイズされているためです。<
>
htmlspecialchars
htmlentities
strip_tags
trim()
mysql_real_escape_string
addcslashes
使用上の問題htmlspecialchars
は、ユーザー入力が許可するはずのアンパサンド (&) をエスケープすることです ( htmlentities
? についても同じことが言えると思います)。を使用すると、" Johnstrip_tags
" のようなものによって、PHP スクリプトが John の結果を選択して表示することになりますが、これは想定されていません。
データベースから選択する前に、入力をサニタイズするための私のPHPコードは次のとおりです。
if(isset($_GET['query'])) {
if(strlen(trim($_GET['query'])) >= 3) {
$search = mysql_real_escape_string(addcslashes(trim($_GET['search']), '\%_'));
$sql = "SELECT name, age, address WHERE name LIKE '%".$search."%'";
[...]
}
}
そして、「x が y の結果に一致しました。」を表示するための私の出力は次のとおりです。
echo htmlspecialchars(strip_tags($_GET['search']), ENT_QUOTES, 'UTF-8')." matched y results.";