使用PHP和MySQL的SHA256盐 - 插入错误

时间:2014-11-28 17:23:26

标签: php mysql insert salt sha256

我使用以下代码在MySQL数据库中加密和散列密码:

<?php
function make($string, $salt = '') {
    return hash('sha256', $string . $salt);
}
function salt($length) {
    return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
}

$salt = salt(32);
$password = make('password', $salt);
?>

但是,当我尝试将生成的salt插入数据库时​​,在某些情况下会发生此错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ÜöOòƒ·¡]ŽÖ', 1)' at line 1

我认为这是因为生成了无法识别的字符。对此有什么解决方案?

1 个答案:

答案 0 :(得分:3)

您正在插入原始二进制垃圾。这将自然地(和半随机地)包含SQL元标记,如'。这意味着您的查询容易受到sql injection attacks的攻击。<​​/ p>

您不会显示任何实际的PHP代码,但您应该使用预准备语句,或者手动转义,例如。

$stmt = mysqli_prepare($conn, "INSERT .... (password_hash) VALUES (?)");
$stmt->execute(array($raw_hash));

$quoted = mysql_real_escape_string($raw_hash);
$sql = "INSERT ... (password_hash) VALUES ('$quoted')";

或者,您可以编码该哈希字符串,例如使用base64,以便编码的哈希变成一个相对无害的字符串。但即使这样,你也应该使用正确的查询构造技术。