zoukankan      html  css  js  c++  java
  • php中一些比常见做法更好的实践

    有些被我们习以为常的做法未必就是最好的,它们可能存在一些安全问题,而解决这些隐患的成本,其实并不高;

    密码

    常见做法是直接MD5进行加密,比如这样:

    //加密
    $passwordStr = md5($password);
    
    //校验
    $passwordStr == md5($password);
    

    简单明了,但这也是最容易被暴力破解的方式,所以更多人选择加一个盐值

    $salt = 'abcd'
    
    //加密
    $passwordStr = md5($password.$salt);
    
    //校验
    $passwordStr == md5($password.$salt);
    

    这样确实好了不少,只要盐值不泄露,就没那么容易被暴力攻破,如果盐值不是重复的就更好了……或者把md5换成其他更安全的算法,或者使用 pbkdf2 之类的扩展算法增加一层保护……
    然而做了这么多,还不如直接使用php自带的password_hashpassword_verify函数:

    //加密
    $passwordStr = password_hash($password, PASSWORD_DEFAULT);
    
    //校验
    password_verify($password, $password_verify);
    

    password_hash的官方文档
    password_verify的官方文档

    随机字符串

    常见做法:

    md5(microtime());
    md5(rand());
    //稍微好一点点的:
    md5(mt_rand());
    

    然而这些做法都不安全……更好的方案是:

    $length = 16;
    bin2hex(random_bytes($length));
    

    这样就可以输出安全的32位16进制字符串了~
    random_bytes的官方文档

  • 相关阅读:
    WEB前端开发规范文档
    js九九乘法表
    阿里前端两年随想
    自动播放选项卡
    HTML+CSS编写规范
    简易秒表
    关于响应式布局
    关于PHP语言
    关于CSS3的小知识点之2D变换
    关于H5框架之Bootstrap的小知识
  • 原文地址:https://www.cnblogs.com/Eden-cola/p/php-better-password.html
Copyright © 2011-2022 走看看