php
  • security
  • salt
  • 2009-12-05 179 views 0 likes 
    0

    您对这个登录程序有什么看法?它很安全吗?php安全登录

    当他们登录我首先检查用户名存在,如果它确实我抓住从用户的盐(每个用户都有独特的盐),我重新哈希与贴出的密码

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

    然后我只是与

    $check = mysql_query("SELECT * FROM users WHERE username = '".$username."' AND password = '".$pass."'") or die("MySQL Error: ".mysql_error()); 
    
    +0

    我不明白额外散列密码在这种情况下提高安全性,谨慎详细说明?我很好奇。 –

    +0

    它有助于防止数据库服务器被黑客攻击,并且数据泄漏,在这种情况下,所有破解者将得到的是哈希密码,这对他们来说是没有实际用处的......(除此之外规则,适用,使用彩虹攻击等) –

    回答

    2

    这是不安全的。

    使用参数化查询,或使用mysql_real_escape_string确保您防止SQL注入。

    除此之外,这是一种非常常见的登录技术,基本上是“标准”。

    链接这里更多注射的安全性: How can I prevent SQL injection in PHP?

    +0

    ofc我使用mysql_real_escape_string我不想发布所有代码 – Tony

    +5

    @Tony所以换句话说你在说什么是“我的代码,我没有告诉你安全吗?” – Yacoby

    3

    我不认为这是张贴在失败的MySQL错误是一个好主意。

    or die("MySQL Error: ".mysql_error()); 
    

    说到这里,我想说的是,返回的信息越少越好。提供可以告诉用户尝试登录的信息,不管它是用户名还是密码失败,都不好,这也会告诉用户你正在使用哪种数据库,如何查询等等。

    进一步认识到,在这种情况下最常见的安全方式是克服,是通过社会工程,在这种情况下,它不关心你如何散列数据等(不是你不应该)只是为了认为安全性非常高,并且不会限制自己如何存储和检索数据。

    例如,是否通过加密线路完成登录?用户拥有的密码强度是否有强制执行?用户登录后会发生什么情况,您如何跟踪登录用户与仅访问该网站的用户?你如何防止会议收购等。我不是这个话题的专家,但它是一个广泛的话题。也许你只是想对你发布的代码发表评论,在这种情况下,我的顶级段落应该是你需要阅读的所有内容;)以及Crowe T. Robot的回答:)

    相关问题