如果输入的密码是散列的,那么SQL注入是否会发生?


Can SQL injection happen from inputed passwords if they are hashed?

是否建议将密码的哈希值绑定到准备好的语句中,或者该哈希值应该是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注入。尽管没有理由不将它作为参数传递给准备好的语句,就像其他所有内容一样。