相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)

这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

使用PHP的mt_rand()生成哈希盐的安全性?

我正在尝试生成河豚哈希,我想知道它是否足够安全,可以依靠mt_rand()来为我生成盐?

function blowfish($string, $salt = NULL, $iterations = '08')
{
    if( ! $salt)
    {
        $seed = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        for ($i = 0; $i < 22; $i++)
        {
            $salt .= $seed{mt_rand(0, 63)};
        }
        $salt = '$2a$' . $iterations . '$' . $salt;
    }

    return crypt($string, $salt);
}
Run Code Online (Sandbox Code Playgroud)

上面的字符$ seed是允许的64个字符的河豚盐字母表.我打算用它来生成和比较密码.

$password = 'my^$%#password';
$hash = blowfish($password);

if($hash = blowfish($password, $hash))
{
    print "Matches\n";
    print $hash . "\n";
}
Run Code Online (Sandbox Code Playgroud)

编辑

我从来没有意识到这一点,但@zerkms说的是真的.盐只是为了防止可重复使用的预先计算的攻击,因为盐在他们可以访问哈希的同一点上是已知的.所以目标不是一种不可逆的盐 - 它是一种随机的盐.

那么,这有什么不对吗?

function blowfish($string, $salt …
Run Code Online (Sandbox Code Playgroud)

php hash salt prng

6
推荐指数
1
解决办法
2618
查看次数

标签 统计

php ×2

hash ×1

mysql ×1

prng ×1

salt ×1

security ×1

sql ×1

sql-injection ×1