我知道我已经问过一个关于消毒和逃生的问题,但我有一个问题没有得到回答。
好的,就到这里。如果我有一个 PHP 脚本并且我GET
的用户输入和SELECT
它来自一个 mySQL 数据库,如果我没有逃避<
并>
通过使用其中一个htmlspecialchars
,htmlentities
或者strip_tags
因此允许 HTML 标记成为从数据库中选择/搜索?因为输入已经通过使用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.";