【问题标题】:mysql and security [duplicate]mysql和安全[重复]
【发布时间】:2011-10-19 10:34:29
【问题描述】:

可能重复:
fail execute statement with php and mysql

我有这个语句从数据库中取出输出:

   function ValidateLogin($user_name, $pass)
   {  

   $user_name=SanitizeString($user_name);
   $pass=SanitizeString($pass);


  $user_name=mysql_real_escape_string($user_name);
  $pass=mysql_real_escape_string($pass);


   $salt = 'SHIFLETT';
   $password_hash = hash('sha256',$salt.hash('sha256', $pass));

   $result=mysql_query("SELECT * FROM users WHERE user_name='$user_name' AND pass='$password_hash' LIMIT 1") or die(mysql_error());


   $dataArray=FALSE;


       if(mysql_num_rows($result))
       {
           echo "Login successful".mysql_num_rows($result);
           return $dataArray=TRUE;
       }
       else
       {
           echo "Login unsuccessful:".mysql_num_rows($result);
       }
       return $dataArray;

       mysql_close();
  }

消毒功能是:

function SanitizeString($var)
{
       $var=stripslashes($var);
       $var=htmlentities($var, ENT_QUOTES, 'UTF-8');
       $var=strip_tags($var);
       $var=trim($var);
       return $var;
}

注意插入我使用相同的哈希算法。 ...我在这里得到的总是零:
echo "Login unsuccessful:".mysql_num_rows($result);

是mysql语句错误..还是哈希算法?还是 sanitizeString 函数?

更新:

结果: 在 $pass 被散列之前,我得到了这个:

string(5) "Mad24"
string(1) "1"

当我插入名称并传递给数据库时。我明白了:

string(5) "Mad24"
string(8) "luckyd55" 

这也是在用户的插入和登录过程中对 pass 进行哈希处理之前。为什么我登录时得到1?!?!? \

登录表单

   echo '
      <form action="" method="POST">
      <table width="80%" border="1" cellpadding="10" id="navigationBar">
          <tr>
            <td> <a href="StoredProcedure/User/Registration.php">Register</a></td>
            <td> <a href="/PoliticalForum/controlPanel.php">Control Panel</a></td>
            <td> <a href="/PoliticalForum/checkEmail.php">Donate</a> </td>
            <td align="right">name:<input name="name" type="text" /></td>
            <td>password:<input name="pass" type="password" /> <input name="login" type="submit" value="Login" /> </td>
          </tr>
       </table>
           </form>
       ';

【问题讨论】:

  • 不是答案,但看起来您对所有用户/密码使用相同的盐。您应该为插入数据库的每个密码创建一个随机盐。
  • var_dump($user_name, $password_hash) 并检查它们是否与数据库中的值完全相同。
  • 乍一看,我看不出这里涉及的逻辑有任何重大缺陷。我的建议:尝试回显您在 SQL 语句中使用的参数 $user_name$password_hash,以确定它们是否正确形成。尝试清理密码时应特别小心,但如果在整个应用程序中都严格执行此操作,这应该不是问题。
  • @PeeHaa 实际上他没有使用相同的盐,因为他正在向其中添加实际密码的 sha256。 真正的随机盐会更好,但这个解决方案还不错。
  • 你有什么问题?

标签: php mysql security


【解决方案1】:

在 cmets 中回答您的问题:
哈希算法无法提高网站的安全性。

【讨论】:

    【解决方案2】:

    您可以通过为每个用户创建不同的盐来改进哈希/盐的使用,而不是为所有用户使用相同的盐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2015-12-08
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多