關於php弱型別的一些筆記

2021-10-10 21:36:13 字數 1490 閱讀 2180

1.當比較運算時,會先轉換型別,再進行比較,當乙個字串被轉換為數值比較時,如果字串的開始不包含』0e『,』0x『等特殊字元,其數值為開頭數字表示的數值,如果字串開頭不為數字,則會轉換為0,而如果開頭包含0e,則會按照科學計數法計算,即兩個0e開頭的字串會被認為相等。當有0x開頭的字串,則會轉換為十六進製制進行比較。如下:

<?php

if("0x1046a" == 66666)

else

?>

這樣比較,返回結果總為』yes『。

上述例子均為鬆散比較,當轉換為===即嚴格比較時,上述大部分的比較不會為真,因為嚴格比較並不會將比較物件轉換為同一型別。

2.部分函式在判斷時,也會有鬆散性。

switch

<?php

$a = $_get['id'];

switch($a)

case 2:

case 3:

}?>

當id=1sadkj時,會返回1,也就是switch內的引數,會轉換為數字型。

in_array()

in_array(search,array,type),search引數時被搜尋引數,array時需要檢索的數字,type為檢索型別,當在array中有search引數,則返回true,而當type為空時,檢索時為鬆散比較,當type為true時,檢索為嚴格比較。如下

<?php

$a = $_get['id'];

if(in_array($a,array(1,2,3,4)))

else

?>

當傳入的id為1awd時,會返回true,當將type改為true時,則會返回false,同時,如果id=1,那麼也會返回false,因為get傳入的引數均是字串。

is_numeric

該函式用於判斷引數是否為數字,這裡的判斷同樣是鬆散比較,因此傳入十六進製制的字串可以進行繞過,而這個函式的漏洞有時可以進行二次注入,當後端對傳入的資料通過該函式進行驗證時,就可以將惡意語句進行十六進製制編碼,而十六進製制的資料在儲存進資料庫時,會進行解碼,將惡意語句存入資料庫,如果**未對取出的資料進行校驗,就會造成二次注入。

strcmp

該函式會比較傳入的兩個字串,如果值相等,就會返回0,str1>str2,返回》0,str1**大意為找乙個數字,它的md5值與另乙個引數的md5值進行比較,如果相等則返回flag,做這道題時,是在網上找到的**,如下:

<?php

$count = 0;

for ($i = 1; $i <= 100000000; $i++)

if ($count == 2)

}

該**會生成兩個0e開頭的數字,將這兩個數字作為引數傳入,即可得到flag。

PHP弱型別(一)

1.與 php在使用雙等號 時,不會嚴格檢驗傳入的變數型別,在以下 中 php var dump false 0 執行結果bool true var dump false 執行結果bool true var dump false 0 執行結果bool true var dump 0 0 執行結果bo...

關於JDBC的一些筆記

1 jdbc連線資料庫 首先要找到相應的資料庫驅動,指定連線的資料庫 載入驅動 class.forname 驅動名 獲得連線 connection con drivermanager.getconnection 資料庫連線 使用者名稱 密碼 2 執行sql語句 statement prepareds...

關於caffe的一些筆記

簡述每層的大小變化過程 data 64,3,227,227 conv1 64,96,55,55 pool1 64,96,27,27 norm1 64,96,27,27 conv2 64,256,27,27 pool2 64,256,13,13 norm2 64,256,13,13 conv3 64,...