我知道我已经asked一个关于 sanitizer 和转义的问题,但我有一个问题没有得到回答。
好了,到此为止。如果我有一个 PHP 脚本并且我 GET
用户输入和SELECT
它来自 mySQL 数据库,如果我没有逃脱 <
是否重要/是否存在任何安全风险和 >
通过使用 htmlspecialchars
, htmlentities
hoặc strip_tags
因此允许从数据库中选择/搜索 HTML 标签?因为已经通过使用 trim()
对输入进行了清理, mysql_real_escape_string
Và addcslashes
(\%_)。
sử dụnghtmlspecialchars
的问题是它转义了用户输入应该允许的符号 (&)(我想 htmlentities
也是如此?)。配合使用strip_tags
,诸如“John”之类的内容会导致 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.";
解决此问题的一个好方法是使用 MySQLi,它使用准备好的语句,基本上可以在后端为您转义所有内容,并提供针对 SQL 注入(inject)的强大保护。不转义 GET 数据与不转义任何其他输入一样危险。
Tôi là một lập trình viên xuất sắc, rất giỏi!