zoukankan      html  css  js  c++  java
  • PHP安全之道学习笔记6:密码安全

    PHP安全之道:密码安全

       最近几年用户数据泄露越发频繁,一些使用PHP技术的大型网站被暴库或者脱库,facebook公司曾因为此类事件股价暴跌。从长远发展来看,用户的数据安全对于网站来说至关重要,所以开发者需要关注数据相关的安全,并提高一些对敏感数据的技术性保护。

       用户数据的安全往往和用户密码安全息息相关。用户将账号和相关数据存储在服务器上,而密码成了第一个环节。

    • 1.常规加密方法

      MD5或者SHA1

    具体代码如下所示:

    <?php
       $password = $_POST['password'];
       echo md5($password); // md5加密
       echo sha1($password); // sha1加密
     
    

       由于这种加密手段比较常规,如果用户设置的密码过于常见简单,攻击者完全可以使用密码字典进行暴力破解。所以不建议使用MD5等弱加密算法对密码等敏感数据进行加密,使用散列算法进行加密更佳,如:SHA256或者SHA512。这些算法被用于如ssl证书生成或一些重要的生成算法中,值得使用。

    PHP内置了hash()函数,具体使用如下代码所示。

    <?php
        $password = $_POST['password'];
        echo hash('sha256', $password); // 使用sha256加密
        echo hash('sha512', $password); // 使用sha512加密
    
    

    曾经有一个神奇的电商网站有一句有名的slogan:"我为自己代言。"在密码安全方面我们也可以为自己的数据加点“盐”,增加安全系数。

    使用盐(salt)甚至随机salt来加密,可以让破解更加困难。简单例子如下:

    <?php
        $password = $_POST['password'];
        $salt = rand(1, 100000);
        $password = sha1($password . $salt);
    

    而更为复杂的加密,可以使用mcrypt函数来生成salt,代码如下:

    <?php
        $password = $_POST['password'];
        $salt = base64_encode(mcrpyt_create_iv(32, MCRYPT_DEV_RANDOM);
        $password = md5($password . $salt);
    
    

    当然还可以根据自己实际业务需要自定义自己的算法,以前和腾讯的研发联调接口的时候,我们还会约定不同的业务接口使用不同的业务代码来增加token算法的复杂度。

    为了防止暴力破解,可以注意以下方面:

    • 1.使用验证码进行登录验证或相关授权。
    • 2.定期刷新秘钥。
    • 3.使用随机数的复杂算法。
    • 4.限制某时间段内验证次数。
  • 相关阅读:
    SQL SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)[转]
    ADO.NET 1.基础(SqlCommand\ExecuteScalar\ExecuteReader\sqlDataAdapter)
    SQL 14.子查询
    winform 基础
    SQL – 12.索引 + 13.join
    判断是否为数字
    SQL 17.存储过程
    SQL 16.事务
    SQL 15.变量和流程控制
    SQL 18.触发器
  • 原文地址:https://www.cnblogs.com/freephp/p/12153936.html
Copyright © 2011-2022 走看看