我正在尝试使用SHA2加密“密码”列。问题在于,通过$ _POST变量向MYSQL进行注入,因此我不知道应将SHA2()放在哪里。

这是我的“插入”页面(inscreate.php):

  <?php
    include 'header.php';
    $ins="INSERT INTO users (uname, pwrd, bdate, mail)
        VALUES ('$_POST[uname]','$_POST[pwrd]','$_POST[bdate]','$_POST[mail]')";
if (!mysqli_query($con,$ins))
      {
      die('Error: ' . mysqli_error($con));
      }
    echo "User added! You will be returned to the index page!";

    mysqli_close($con);
    ?>


从我已阅读的内容中,我必须将其放在插入查询的“值”部分:http://coderlearner.com/MySQL_Encryption-Decryption_Example_SHA2

所以我尝试了这些组合:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
            VALUES ('$_POST[uname]','SHA2($_POST[pwrd])','$_POST[bdate]','$_POST[mail]')";


但是如果密码例如:mypass,则数据库中的输出为:SHA2(mypass)

我尝试了这个:

$ins="INSERT INTO users (uname, pwrd, bdate, mail)
    VALUES ('$_POST[uname]',$_POST[SHA2(pwrd)]','$_POST[bdate]','$_POST[mail]')";


但是然后我得到一个解析错误(我理解为什么,但是我仍然在尝试)
所以我的问题是:有人知道我如何加密$ _POST吗?

最佳答案

再次查看示例。

mysql> INSERT INTO userpassword(id, username,password)
    -> VALUES(null,'Lili',SHA2('mypassword1',256));


引号引起来。 SHA2()函数调用用引号引起来。

同样,SHA2()接受两个参数。

'SHA2($_POST[pwrd])'


应该:

SHA2('$_POST[pwrd]', 256)


…但是不要将POST数据直接粘贴到SQL中。这使您很容易受到SQL injection attacks的攻击而需要自己defend

10-06 11:06