1

是否建议将密码的哈希绑定到准备好的语句,或者哈希应该是 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
}

对于密码哈希函数,我正在使用this。问题是否归结为天气或散列函数的输出是否可以生成能够进行 SQL 注入的代码?用户输入的密码是否应该在其他地方进行清理?如果是,如何?

@commenters 请解释一下,而不是仅仅说“坏主意”或类似的话

4

1 回答 1

1

Bcrypt 哈希仅由 base64 字符(., /, 0–9, A–Z, a–z)和前导$2$or组成$2a$,因此可以安全地防止 SQL 注入。尽管没有理由不将其作为参数传递给准备好的语句,就像其他所有内容一样。

于 2013-06-19T20:12:56.657 回答