我正在尝试强化我的一些 PHP 代码并使用 mysqli 准备好的语句来更好地验证用户输入并防止注入攻击。
我放弃了 mysqli_real_escape_string因为它不会转义 % 和 _。然而,当我将查询创建为 mysqli 准备好的语句时,同样的缺陷仍然存在。该查询根据用户的用户名提取用户盐值。我会对密码和其他查找做类似的事情。
Code:
$db = new sitedatalayer();
if ($stmt = $db->_conn->prepare("SELECT `salt` FROM admins WHERE `username` LIKE ? LIMIT 1")) {
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($salt);
while ($stmt->fetch()) {
printf("%s\n", $salt);
}
$stmt->close();
}
else return false;
- 我的陈述是否正确?
- 如果我是其他什么字符需要检查?还有哪些缺陷?
- 进行这些类型的选择的最佳实践是什么?
Thanks,
%
并不是一个天生有害的角色。
问题是:你为什么使用LIKE
首先?在那儿any您不需要的情况exact匹配用户名?
查询应该很简单:
SELECT `salt` FROM admins WHERE `username` = ? LIMIT 1
在这种情况下,如果我进入%bsmith
我的用户名必须是(字面意思)“%bsmith”,以便您找到匹配项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)