PHP编程的安全性思考
来源:互联网 发布:情定三生知夏向天圆房 编辑:程序博客网 时间:2024/06/05 15:25
switch case忘记加break的后果
$var= 0; switch ($var) { case 0: case 1: $var= 1; break; } echo $var;//期望输出 0 实际输出 1
notice:如果不在 case 的语句段最后写上 break 的话,PHP 将执行所有的 case 语句!这将是非常危险的。
数字与字符串比较的陷阱
$var1 = "2018a"; $var2 = "a2018"; $flag1 = 0; $flag2 = 0; ($var1 > 2017) ? $flag1 = 1 : NULL; ($var2 > 2017) ? $flag2 = 1 : NULL; echo $flag1;//输出 1 echo $flag2;//输出 0
notice: 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0,避免出现这种非预期结果的情况是使用类型比较符“===”。
不严格的array_search,你找到的真的是我吗
$var = array( 0 => "a", 1 => true ); var_dump(array_search("cx", $var));//期望输出 bool(false) 实际输出 int(1)
notice: array_search可选的第三个参数strict 如果为 TRUE,则 array_search() 将在数组中检查完全相同的元素。然而该参数默认为FALSE,这意味着如果你正在数组中寻找一个字符串,刚好它有个键对应的值是TRUE,那么无论如何你都会得到它所对应的那个键,不论被查找的字符串是否真的存在!
有时候我们不需要进行碰撞就能得到不可思议的MD5值比较结果
$flag = false; $girl = '15562';//一个孤单的女孩 for ($i = 0; $i < 1000000; $i++) {//她走到街上 $boy = ""; for ($i = 0; $i < 5; $i++) { $boy .= chr(mt_rand(33, 126));//路人生成中 } $boy = $boy . 'CHENG';//一个路人和她相遇了 if (substr(md5($boy), 8, 16) == substr(md5($girl), 8, 16)) {//另一半会是他吗 $flag = true; break; } } var_dump($flag);//期望输出 bool(false) 实际输出 bool(true)
notice:类似15562这样的数字能够在md5加密之后可能形成0e12312351的hash串,这种形式 的字符串会被“聪明”的PHP解析器默认解析为 numerical strings类型。在利用”!=”或”==”来对哈希值进行比较时,numerical strings类型强制转换结果为数字0。所以如果两个不同的密码经过md5加密以后,其hash值都是以”0e”开头的,那么PHP将会认为他们相同,都是0。
0 0
- PHP编程的安全性思考
- 关于“安全性”的思考
- PHP安全编程:register_globals的安全性
- PHP安全编程之register_globals的安全性
- 云存储安全性的思考
- 关于BroadCastReceiver安全性的思考
- PHP安全编程:register_globals的安全性 全局变量注册
- [李景山php] 关于编程的思考
- 对于APP安全性测试策略的思考
- php的线程不安全性
- php代码安全性的建议
- PHP网页的安全性问题
- 确保PHP应用程序的安全性
- PHP网站的安全性问题
- PHP网页的安全性问题
- php 安全性
- 对PHP的思考
- 关于PHp的思考
- spfa + 静态链表 模板
- 1085: [SCOI2005]骑士精神
- UVA 10976
- 一个简单的每日访客IP统计
- T_SQL 将一列多行数据合并为一行
- PHP编程的安全性思考
- 2015 去哪儿校招---字符串中第一个重复的字符
- launcher图标自动生成、点9图片在线编辑工具
- as(android studio)的初次使用
- uva12657 双向链表的实现与痛苦的调试
- java-static
- 类与对象的代码的呈现
- Python数据挖掘课程 七.PCA降维操作及subplot子图绘制
- Coursera ML笔记4