天天看點

php intval()函數漏洞,is_numeric() 漏洞,繞過回文判斷

Intval函數擷取變量整數數值

Intval最大的值取決于作業系統。 32 位系統最大帶符号的 integer 範圍是 -2147483648 到 2147483647。舉例,在這樣的系統上, intval(‘1000000000000’) 會傳回 2147483647。64 位系統上,最大帶符号的 integer 值是 9223372036854775807。

這個有個應用就是在判斷數值是不是回文上,如果參數為2147483647,那麼當它反過來,由于超出了限制,是以依然等于2147483647。即為回文。

is_numeric()  判斷變量是否為數字或數字字元串,不僅檢查10進制,16進制是可以。

is_numeric函數對于空字元%00,無論是%00放在前後都可以判斷為非數值,而%20空格字元隻能放在數值後。是以,檢視函數發現該函數對對于第一個空格字元會跳過空格字元判斷,接着後面的判斷!

該函數還可能造成sql注入,例如将‘1 or 1'轉換為16進制形式,再傳參,就可以造成sql注入

intval($req["number"])=intval(strrev($req["number"]))  如果要求不是回文,但又要滿足這個條件,可以用科學計數法構造0=0:number=0e-0%00

轉載于:https://www.cnblogs.com/GH-D/p/8085676.html

繼續閱讀