所以基本上我一直在深入研究 MySQL 和 PHP 领域……特别是在处理数据库和表单输入时应该采取的安全措施。到目前为止,我发现强烈推荐以下内容:
- 准备好的报表
- 使用 mysqli_real_escape_string()
- 不要使用魔术引号,因为它会混淆数据库并最终给您提供诸如“您的名字不是……”之类的内容。
所有这一切都很棒,我一直在关注它。然而,我想知道是否也应该转义诸如美元符号 [$]、百分号 [%] 以及其他可能的字符。查询可能无法将美元符号解释为 PHP 变量吗?我听说过使用 % 符号甚至通配符的 LIKE 语法怎么样?从技术上讲,准备好的声明应该能够解决所有这些问题,但我只是想保证安全并确保所有内容都正确逃脱。如果我忘记使用准备好的陈述或只是忽略了这样做,我希望这第二道防线可以让我免于头痛。
这是我目前用于转义的方法:
function escape($connection, $data){
$new_data = trim($data);
$new_data = mysqli_real_escape_string($connection, $new_data);
$new_data = addcslashes($new_data, '%_$');
$new_data = htmlspecialchars($new_data, ENT_NOQUOTES);
return $new_data;
}
那么这是否合适呢?我做错了什么可怕的事情吗?请注意,在检索数据库数据时,我必须删除 $、% 和 _ 字符之前的反斜杠。
您不需要转义美元符号。 MySQL 不会特殊对待该字符,并且 PHP 仅在源代码中识别它,而不是在字符串值中识别它(除非您调用eval
在绳子上,但那是完全不同的蠕虫)。
你只需要逃离%
and _
如果您使用用户输入作为参数LIKE
并且您不希望用户能够使用通配符。如果您正在处理搜索表单,则可能会出现这种情况。存储到数据库时不需要使用它。
你不需要使用htmlspecialchars
访问数据库时。仅当您在 HTML 页面中向用户显示数据时才应使用它,以防止 XSS 注入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)