概述
弱类型问题
类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。
如果在用于密码比对,身份验证中没有对类型进行强处理,往往会导致对比成功,身份伪造等等。
常见的弱类型对比
数字型与其对应的字符串
- 0 == ‘0’ => true
0 与 不包含任何数字字符串
- 0 == ‘abc’ => true
数字型与其在前缀的字符串
- 1 == ‘1abc’ => true
数学计算运算
- ‘1e0’==‘1e2’ => true
- “10” == “1e1” => true
- ‘0e10’ == ‘0e1000’ => true
- ‘0x001’==‘1’ => true
- md5(‘s878926199a’) == 0 => true
- 这里是 md5(‘s878926199a’) 的值是 0e 开头 。和上面第一种一样
- 更多0e的哈希看这里 PHP处理0e开头md5哈希字符串缺陷/bug
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
- empty
- empty(‘0’) == empty(‘0.0’) false
- empty(‘0’) == empty(0.0) true
- empty 返回 TRUE的情况:
- 若变量不存在则返回 TRUE
- 若变量存在且其值为""、0、“0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE
产生弱类型的函数
- strcmp
- In_array
- array_search
- …
JAVAScirpt 弱类型
数字型与其对应的字符串
- 0 == ‘0’ => true
数学计算运算
- ‘0e10’ == ‘0e1000’ => true
- ’ 0x001’==‘1’ => true
- 因为 ‘0e10’ == ‘0e1000’ => true 所以这里也存在MD5处理缺陷
空值
-
JAVAScript 只有 null undefine 两种
-
[],0,'0’之类均等于 null ,只有变量未赋值才是null或者undefined
-
null == undefine => true
-
‘’ == null => false
-
{} ==[] => false 空数组和空对象也不相等
-
{} == function(){} =>false 空函数和空对象也不相等
NaN (Not a Number,非数) 表示未定义或者不可描述的数字 =。=
- NaN == NaN => false
函数类
- 这里只测试了 indexOf
- [‘22’].indexOf(22) = -1 不存在
- [‘0e11’].indexOf(0)= -1 不存在
- [‘0e11’].indexOf(‘0e11’)= 0 存在
- 可以看到 这里均用了强制类型 看来 JavaScript 比 PHP 稍微严格一点
参考链接:https://xz.aliyun.com/t/1927?spm=5176.12901015.0.i12901015.4745525cPZUxuS
参考链接:https://mp.weixin.qq.com/s/2ULQj2risPKzskX32WRMeg
最后
以上就是淡定唇彩为你收集整理的[CTF][Web][PHP][JavaScript]弱类型问题的全部内容,希望文章能够帮你解决[CTF][Web][PHP][JavaScript]弱类型问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复