是否建议将密码的哈希值绑定到准备好的语句中,或者该哈希值应该是SQL语句的正常部分?
if($createUserStmt = mysqli_prepare($link, 'INSERT INTO users (name, pass) VALUES (?, ?)')
{
mysqli_stmt_bind_param($createUserStmt, 's', $_GET['username'], $passwordHash);
//rest of prepared statment
}
if($createUserStmt = mysqli_prepare($link, 'INSERT INTO users (name, pass) VALUES (?, '.$passwordHash.')')
{
mysqli_stmt_bind_param($createUserStmt, 's', $_GET['username']);
//rest of prepared statment
}
对于密码散列函数,我使用这个。问题归结为哈希函数的输出是否可以生成能够进行SQL注入的代码?用户输入的密码是否应该在其他地方进行处理?如果是,怎么做?
@评论者请解释一下,不要只是说"坏主意"。或者等于
Bcrypt哈希仅由base64字符(.
, /
, 0–9
, A–Z
, a–z
)和领先的$2$
或$2a$
组成,因此它是安全的,不受SQL注入。尽管没有理由不将它作为参数传递给准备好的语句,就像其他所有内容一样。