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.限制某时间段内验证次数。
posted @ 2020-01-05 22:26  freephp  阅读(305)  评论(0编辑  收藏  举报