[CTF][Web][PHP][JavaScript]弱类型问题

博客探讨了在CTF和Web开发中PHP和JavaScript的弱类型问题,指出这种特性可能导致安全漏洞,如身份验证错误。文章通过示例展示了数字与字符串在比较时可能产生的意外结果,以及涉及类型转换的函数如何影响结果。还提到了JavaScript中的一些类似问题,并指出JavaScript在某些情况下相对更严格。

弱类型问题

类型转换是无法避免的问题。例如需要将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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值