PHP弱型別比較

2021-10-23 19:52:50 字數 1621 閱讀 7269

ctf中弱型別比較

php弱型別比較

php中其中兩種比較符號:

==:先將字串型別轉化成相同,再比較

===:先判斷兩種字串的型別是否相等,再比較

字串和數字比較使用==時,字串會先轉換為數字型別再比較

var_dump

('a'==0

);//true,此時a字串型別轉化成數字,因為a字串開頭中沒有找到數字,所以轉換為0

var_dump

('123a'

==123);

//true,這裡'123a'會被轉換為123

var_dump

('a123'

==123);

//false,因為php中有這樣乙個規定:字串的開始部分決定了它的值,如果該字串以合法的數字開始,則使用該數字至和它連續的最後乙個數字結束,否則其比較時整體值為0。

舉例:var_dump

('123a1'

==123);

//true

var_dump

('1233a'

==123);

//false

注:<、>、<=、>=都存在和==相同的弱型別,原理相同!!!

xctf_******_php

<

?php

show_source

(__file__)

;include

("config.php");

$a=@$_get[

'a']

;$b=@$_get[

'b'];if

($a==

0 and $a)if(

is_numeric

($b))if

($b>

1234)?

>

(1)這裡包含了config.php

(2)url接收引數a和b的值

(3)如果$a等於0 and a,輸

出a,輸出

a,輸出

flag1

(4)如果b是數

字或者字

符串那麼

退出當前

指令碼(5

)如

果b是數字或者字串那麼退出當前指令碼 (5)如果

b是數字或者

字串那

麼退出當

前指令碼(

5)如果

b>1234,輸出fla

g2所以

,這裡我

們既要保

證輸

出flag2 所以,這裡我們既要保證輸出

flag2所

以,這裡

我們既要

保證輸出

a,b ,又

要保

證b,又要保證

b,又要保證

b是數字,那麼就用到php的弱型別比較了

那麼a=d&b=2222a

執行後:

if

(true and true)if

(is_numeric

(2222a))if

(2222a>

1234){

echo $flag2;

php 弱型別比較

php中 是弱等於,不會比較變數型別 是強等於,會先比較變數型別。0e 開頭跟數字的字串 例如 0e123 會當作科學計數法去比較,所以和0相等 0x 開頭跟數字的字串 例如 0x1e240 會被當作16進製制數去比較 布林值true和任意字串都弱相等。當比較的一方是字串時,會先把其轉換為數字,不能...

php弱型別比較

題目 1.開啟頁面,進行 審計,發現同時滿足 a 0 和 a 時,顯示flag1。2.php中的弱型別比較會使 abc 0為真,所以輸入a abc時,可得到flag1,如圖所示。abc可換成任意字元 3.is numeric 函式會判斷如果是數字和數字字串則返回 true,否則返回 false,且p...

往事重提 php弱型別之比較

php是弱型別語言,比如 變數 v的值為 0 false null 未定義 if v echo true 都會輸出true,所以這些條件都為假,這在其他一些語言中是不能容忍的。於是我們在日常開發中也慢慢的習慣了這種弱型別。以至於我們在判斷字串相等時,也會直接忽略了0的存在直接比較,比如 v arra...