[CTF][Web][PHP][JavaScript]弱类型问题
生活随笔
收集整理的這篇文章主要介紹了
[CTF][Web][PHP][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
- 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]弱类型问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nuxt 中 vuex 路由鉴权 kee
- 下一篇: php支付接口要改动的参数,京东支付接口