我已经做了一些研究,但仍然感到困惑,这是我的研究成果。有人可以发表评论并提出建议,告诉我如何使它们变得更好,或者是否已有可以使用的坚如磐石的实施方案?
方法1:
array_map('trim', $_GET); array_map('stripslashes', $_GET); array_map('mysql_real_escape_string', $_GET);
方法2:
function filter($data) { $data = trim(htmlentities(strip_tags($data))); if (get_magic_quotes_gpc()) $data = stripslashes($data); $data = mysql_real_escape_string($data); return $data; } foreach($_GET as $key => $value) { $data[$key] = filter($value); }
您显示的两种方法都不可取
一揽子“清理”数据会适得其反,因为需要根据数据的使用方式以不同的方式清理数据:在数据库查询中使用数据需要不同的清理方式,不同于以HTML输出或将其用作参数的方式。在命令行调用中,等等。
最好的卫生措施是在使用数据之前。这样,程序员可以轻松地查看是否所有数据实际上都已被清理。
如果使用mysql_*函数系列,请mysql_real_escape_string()对查询中使用的每个参数执行“ a ”:
mysql_*
mysql_real_escape_string()
$safe_name = mysql_real_escape_string($_POST["name"]); $safe_address = mysql_real_escape_string($_POST["address"]); $result = mysql_query ("INSERT INTO table VALUES '$safe_name', '$safe_address'");
如果使用PDO或mysqli函数系列,则可以使用参数化查询,这些查询可以消除大多数SQL注入问题- 每天都可以避免。
完全可以使用编写安全查询mysql_*,也可以在PDO查询中引入安全漏洞,但是如果您是从头开始的话,请考虑立即使用PDO或mysqli。
strip_tags()仅当您计划以HTML输出用户输入的数据时才使用;请注意,您需要执行其他操作htmlspecialchars()才能可靠地防止XSS攻击。
strip_tags()
htmlspecialchars()
唯一具有一定价值的全面卫生方法是
if (get_magic_quotes_gpc()) $data = stripslashes($data);
调用可过滤掉早期版本的PHP中现已弃用的“魔术引号”功能所增加的转义层。