bar*_*oon 4 php security mysqli prepared-statement
我正在努力强化我的一些PHP代码并使用mysqli预处理语句来更好地验证用户输入并防止注入攻击.
我切断了mysqli_real_escape_string,因为它没有转义%和_.但是,当我将查询创建为mysqli预处理语句时,仍然存在相同的缺陷.该查询根据用户名提取用户salt值.我会为密码和其他查找做类似的事情.
码:
$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;
Run Code Online (Sandbox Code Playgroud)
谢谢,
% 不是一个固有的有害品质.
问题是:你为什么一开始使用a LIKE?在任何情况下您都不需要完全匹配用户名吗?
查询应该简单:
SELECT `salt` FROM admins WHERE `username` = ? LIMIT 1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我要输入%bsmith我的用户名,则必须(字面意思)"%bsmith"才能找到匹配项.
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |