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

密码

常见做法是直接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的官方文档

最新文章

  1. MVC3 数据验证用法之密码验证设计思路
  2. 2015暑假多校联合---Cake(深搜)
  3. Maven私服Nexus3.x环境构建操作记录
  4. paip.元数据驱动的转换-读取文件行到个list理念 uapi java php python总结
  5. 【linux】文件隐藏属性
  6. json,serialize,msgpack比较
  7. 20145120 《Java程序设计》实验二实验报告
  8. php的post和get方法
  9. css-01
  10. VS2010中使用CL快速 生成DLL的方法
  11. Python3基础 add() 向集合中加入新的元素
  12. 【经验】AngularJS
  13. EntityFramework Core高并发深挖详解,一纸长文,你准备好了吗?
  14. hibernate 基本配置文件及CRDU的操作和基本的HQL查询
  15. Python进阶_类与实例
  16. python生产环境部署
  17. Django基础四<二>(OneToMany和 ManyToMany,ModelForm)
  18. 第一天学JAVA,下载JDK,配置JAVA环境变量!!!
  19. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
  20. Codeforces 1076D Edge Deletion 【最短路+贪心】

热门文章

  1. tomcat下配置https方式
  2. 社区之星礼品开箱——感谢CSDN
  3. JAVA Eclipse开发Android程序会经常闪退是怎么回事
  4. php创建无限极目录代码
  5. apue学习笔记(第十一章 线程)
  6. oracle 客户端连接
  7. RF--- selenium
  8. Spring Boot从入门到实战:整合Web项目常用功能
  9. Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
  10. 渐变背景(background)效果