首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SHA2上散列$_POST?

如何在SHA2上散列$_POST?
EN

Stack Overflow用户
提问于 2014-04-24 09:00:21
回答 3查看 1.2K关注 0票数 0

我正试图用SHA2加密我的“密码”列。问题是,对MYSQL的注入是通过一个$_POST变量进行的,所以我不知道应该将SHA2()放在哪里。

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

代码语言:javascript
复制
  <?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);
    ?>  

根据我所读到的,我必须将它放在insert查询的“value”部分:SHA2

所以我尝试了这些组合:

代码语言:javascript
复制
$ins="INSERT INTO users (uname, pwrd, bdate, mail)
            VALUES ('$_POST[uname]','SHA2($_POST[pwrd])','$_POST[bdate]','$_POST[mail]')";

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

我试过这个:

代码语言:javascript
复制
$ins="INSERT INTO users (uname, pwrd, bdate, mail)
    VALUES ('$_POST[uname]',$_POST[SHA2(pwrd)]','$_POST[bdate]','$_POST[mail]')";

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-24 09:03:50

再看一遍例子。

代码语言:javascript
复制
mysql> INSERT INTO userpassword(id, username,password)
    -> VALUES(null,'Lili',SHA2('mypassword1',256));

引号绕着绳子转。SHA2()函数调用绕过引号。

此外,SHA2()采用两个参数。

代码语言:javascript
复制
'SHA2($_POST[pwrd])'

应:

代码语言:javascript
复制
SHA2('$_POST[pwrd]', 256)

…但是,不要将POST数据直接放入SQL中。它使您的易受 SQL注入攻击的攻击,而您需要从它那里获取守备

票数 2
EN

Stack Overflow用户

发布于 2014-04-24 09:34:33

SHA*散列函数不适合密码,因为它们的速度太快。您的示例中的另一个问题是,您正在生成未加盐的散列。看看散列()函数,它将生成一个BCrypt哈希,并负责安全盐的生成。还存在一个用于较早版本的兼容性包

代码语言:javascript
复制
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

这也意味着您不能在SQL语句中直接验证密码,而是从数据库中读取哈希(按用户名),然后使用该哈希调用password_verify()。

票数 1
EN

Stack Overflow用户

发布于 2014-04-24 09:02:33

使用SHA2('$_POST[pwrd]',256) insted of 'SHA2($_POST[pwrd])'

代码语言:javascript
复制
$ins="INSERT INTO users (uname, pwrd, bdate, mail)
       VALUES 
('$_POST[uname]',SHA2('$_POST[pwrd]',256),'$_POST[bdate]','$_POST[mail]')";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23264343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档