php中一些比常见做法更好的实践
2024-08-30 02:17:38
有些被我们习以为常的做法未必就是最好的,它们可能存在一些安全问题,而解决这些隐患的成本,其实并不高;
密码
常见做法是直接MD5进行加密,比如这样:
//加密
$passwordStr = md5($password);
//校验
$passwordStr == md5($password);
简单明了,但这也是最容易被暴力破解的方式,所以更多人选择加一个盐值
$salt = 'abcd'
//加密
$passwordStr = md5($password.$salt);
//校验
$passwordStr == md5($password.$salt);
这样确实好了不少,只要盐值不泄露,就没那么容易被暴力攻破,如果盐值不是重复的就更好了……或者把md5
换成其他更安全的算法,或者使用 pbkdf2 之类的扩展算法增加一层保护……
然而做了这么多,还不如直接使用php自带的password_hash
和password_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的官方文档
最新文章
- MVC3 数据验证用法之密码验证设计思路
- 2015暑假多校联合---Cake(深搜)
- Maven私服Nexus3.x环境构建操作记录
- paip.元数据驱动的转换-读取文件行到个list理念 uapi java php python总结
- 【linux】文件隐藏属性
- json,serialize,msgpack比较
- 20145120 《Java程序设计》实验二实验报告
- php的post和get方法
- css-01
- VS2010中使用CL快速 生成DLL的方法
- Python3基础 add() 向集合中加入新的元素
- 【经验】AngularJS
- EntityFramework Core高并发深挖详解,一纸长文,你准备好了吗?
- hibernate 基本配置文件及CRDU的操作和基本的HQL查询
- Python进阶_类与实例
- python生产环境部署
- Django基础四<;二>;(OneToMany和 ManyToMany,ModelForm)
- 第一天学JAVA,下载JDK,配置JAVA环境变量!!!
- Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
- Codeforces 1076D Edge Deletion 【最短路+贪心】
热门文章
- tomcat下配置https方式
- 社区之星礼品开箱——感谢CSDN
- JAVA Eclipse开发Android程序会经常闪退是怎么回事
- php创建无限极目录代码
- apue学习笔记(第十一章 线程)
- oracle 客户端连接
- RF--- selenium
- Spring Boot从入门到实战:整合Web项目常用功能
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
- 渐变背景(background)效果