「作者主頁(yè)」:士別三日wyx
「作者簡(jiǎn)介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:對(duì)網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門(mén)到精通》
intval() 函數(shù)可以獲取變量的「整數(shù)值」。常用于強(qiáng)制類型轉(zhuǎn)換。
語(yǔ)法
int intval( $var, $base )
參數(shù)
- $var:需要轉(zhuǎn)換成 integer 的「變量」
- $base:轉(zhuǎn)換所使用的「進(jìn)制」
返回值
返回值為 integer 類型,可能是 0 或 1 或 其他integer 值。
- 0:失敗 或 空array 返回 0
- 1:非空array 返回 1
- 其他integer值:成功時(shí) 返回 $var 的 integer 值。
返回值的「最大值」取決于系統(tǒng)
- 32 位系統(tǒng)(-2147483648 到 2147483647)
- 64 位系統(tǒng)(-9223372036854775808到9223372036854775807)
一、進(jìn)制自動(dòng)轉(zhuǎn)換
第二個(gè)參數(shù) $base 允許為空。
當(dāng) base 為空時(shí),默認(rèn)值是 0,會(huì)根據(jù) $var 的格式來(lái)調(diào)整轉(zhuǎn)換的進(jìn)制。
- 如果 $var 以 0 開(kāi)頭,就使用 8進(jìn)制
- 如果 $var 以0x開(kāi)頭,就使用 16進(jìn)制
- 否則,就使用 10進(jìn)制
實(shí)例:
# 10的 8進(jìn)制是12
var_dump(intval(012));
# 10的 16進(jìn)制是A
var_dump(intval(0xA));
# 10的 10進(jìn)制是10
var_dump(intval(10));
輸出:
int(10)
int(10)
int(10)
繞過(guò)思路:當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以使用它的 8進(jìn)制/16進(jìn)制來(lái)繞過(guò)。
二、轉(zhuǎn)換數(shù)組
intval() 轉(zhuǎn)換數(shù)組類型時(shí),不關(guān)心數(shù)組中的內(nèi)容,只判斷數(shù)組中有沒(méi)有元素。
- 「空數(shù)組」返回 0
- 「非空數(shù)組」返回 1
實(shí)例:
var_dump(intval(array()));
var_dump(intval(array(3,2)));
輸出:
int(0)
int(1)
如果傳入的 $var是數(shù)組中的某個(gè)值時(shí),則當(dāng)做變量來(lái)轉(zhuǎn)換,而不是當(dāng)做數(shù)組類型。
實(shí)例:
$arr1 = array(8,6);
var_dump(intval($arr1[0]));
輸出:
int(8)
繞過(guò)思路:對(duì)于弱比較(a==b),可以給a、b兩個(gè)參數(shù)傳入空數(shù)組,使弱比較為true。
三、轉(zhuǎn)換小數(shù)
intval() 轉(zhuǎn)換小數(shù)類型時(shí),只返回個(gè)位數(shù),不遵循四舍五入的原則。
實(shí)例:
var_dump(intval(12));
var_dump(intval(1.2));
var_dump(intval(1.9));
輸出:
int(12)
int(1)
int(1)
繞過(guò)思路:當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以給它增加小數(shù)位來(lái)繞過(guò)。
四、轉(zhuǎn)換字符串
intval() 轉(zhuǎn)換字符串類型時(shí),會(huì)判斷字符串是否以數(shù)字開(kāi)頭
- 如果以數(shù)字開(kāi)頭,就返回1個(gè)或多個(gè)連續(xù)的數(shù)字
- 如果以字母開(kāi)頭,就返回0
單雙引號(hào)對(duì)轉(zhuǎn)換結(jié)果沒(méi)有影響,并且 0 或 0x 開(kāi)頭也只會(huì)當(dāng)做普通字符串處理。
實(shí)例:
var_dump(intval('12abc'));
var_dump(intval("12abc"));
var_dump(intval('abc123'));
var_dump(intval('1a2b3c'));
var_dump(intval('0101'));
var_dump(intval("0x2b"));
輸出:
int(12)
int(12)
int(0)
int(1)
int(101)
int(0)
五、取反~
intval() 函數(shù)支持一些特殊符號(hào)的,比如~
取反。
實(shí)例:
var_dump(intval(~10));
var_dump(intval(~~10));
輸出:
int(-11)
int(10)
繞過(guò)思路:當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以兩次取反來(lái)繞過(guò)。
六、算數(shù)運(yùn)算符
intval() 函數(shù)支持算數(shù)運(yùn)算符,如果傳入的 $var參數(shù)包含算數(shù)運(yùn)算符,會(huì)先運(yùn)算,再對(duì)運(yùn)算結(jié)果進(jìn)行轉(zhuǎn)換。
實(shí)例:
var_dump(intval(5*5));
var_dump(intval(5+5));
var_dump(intval(05+5));
輸出:
int(25)
int(10)
int(10)
繞過(guò)思路:當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以使用算數(shù)運(yùn)算符繞過(guò)。
七、浮點(diǎn)數(shù)精度缺失問(wèn)題
由于PHP中的浮點(diǎn)數(shù)是「弱類型」,存在「精度丟失」的問(wèn)題,在轉(zhuǎn)換時(shí)可能會(huì)出現(xiàn)意料之外的情況。
比如下面這個(gè)案例,第一個(gè)輸出34正常,第二個(gè)以為會(huì)輸出58,結(jié)果輸出了57。
實(shí)例:
var_dump(intval(0.34*100.0));
var_dump(intval(0.58*100.0));
輸出:
int(34)
int(57)
三、intval()繞過(guò)思路
最后匯總一下intval()函數(shù)漏洞的繞過(guò)思路:
1)當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以使用它的 8進(jìn)制/16進(jìn)制來(lái)繞過(guò);比如過(guò)濾10,就用012(八進(jìn)制)或0xA(十六進(jìn)制)。
2)對(duì)于弱比較(a==b),可以給a、b兩個(gè)參數(shù)傳入空數(shù)組,使弱比較為true。
3)當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以給它增加小數(shù)位來(lái)繞過(guò);比如過(guò)濾3,就用3.1。
4)當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以給它拼接字符串來(lái)繞過(guò);比如過(guò)濾3,就用3ab。(GET請(qǐng)求的參數(shù)會(huì)自動(dòng)拼接單引號(hào))
5)當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以兩次取反來(lái)繞過(guò);比如過(guò)濾10,就用~~10。
6)當(dāng)某個(gè)數(shù)字被過(guò)濾時(shí),可以使用算數(shù)運(yùn)算符繞過(guò);比如過(guò)濾10,就用 5+5 或 2*5。
粉絲福利
評(píng)論區(qū)留言即可參與抽獎(jiǎng),送《ChatGPT一本通》。
本書(shū)從ChatGPT等自然語(yǔ)言大模型基礎(chǔ)知識(shí)講起,重點(diǎn)介紹了ChatGPT等語(yǔ)言大模型在生活中的實(shí)際應(yīng)用,讓每一個(gè)人都能了解未來(lái)的生活和工作。
本書(shū)分為16章,涵蓋的主要內(nèi)容有人工智能、OpenAI、ChatGPT的介紹、ChatGPT的使用技巧,向大家展現(xiàn)ChatGPT在學(xué)術(shù)教育、商業(yè)管理、新媒體、辦公、求職、法律、電商等不同領(lǐng)域的應(yīng)用,以及ChatGPT當(dāng)下的問(wèn)題、大模型的未來(lái)。
本書(shū)通俗易懂,用最簡(jiǎn)單的語(yǔ)言解釋人工智能的入門(mén)知識(shí),案例豐富,實(shí)用性強(qiáng),適合每一個(gè)想要了ChatGPT等自然語(yǔ)言處理大模型的讀者和進(jìn)階愛(ài)好者閱讀,也適合想要通過(guò)API打造新時(shí)代語(yǔ)言模型應(yīng)用的開(kāi)發(fā)者。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-488566.html
實(shí)用性強(qiáng):本書(shū)通過(guò)實(shí)際案例和操作技巧,使讀者能夠快速上手并靈活運(yùn)用ChatGPT技術(shù),提升職場(chǎng)競(jìng)爭(zhēng)力。
深入淺出:本書(shū)以通俗易懂的語(yǔ)言解釋ChatGPT的原理和應(yīng)用,即使是職場(chǎng)新手也能輕松掌握。
高效學(xué)習(xí):本書(shū)結(jié)構(gòu)緊湊,內(nèi)容精煉,便于讀者快速吸收和理解,無(wú)需花費(fèi)大量時(shí)間。
融合行業(yè)經(jīng)驗(yàn):本書(shū)結(jié)合了作者多年的經(jīng)驗(yàn),為讀者提供了獨(dú)到的見(jiàn)解和實(shí)用建議。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-488566.html
到了這里,關(guān)于PHP intval()函數(shù)詳解,intval()函數(shù)漏洞原理及繞過(guò)思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!