php代碼審計-重點函數(shù)

漏洞關鍵字

SQL注入:
 select insert update mysql_query mysqli等
文件上傳:
 $FILES,type="file"锦援,上傳忽舟,move_upload_file()等
 XSS跨站:
 print print_r echo sprintf die var_dump var_export等
文件包含:
 Include include_once require require_once等
代碼執(zhí)行:
 eval assert preg replace call user func call user func array等
命令執(zhí)行:
 system exec shell_exec `` passthru pcntl_exec popen proc_open
變量覆蓋:
 extract() parse_str() importrequestvariables() $$等
反序列化:
 serialize() unserialize() _construct _destruct等
通用關鍵字:
 $GET $POST $REQUEST $FILES $SEVER

1. PHP操作數(shù)據(jù)庫函數(shù)

mysqli_connect()
//建立與MySQL數(shù)據(jù)庫的連接
mysqli_connect_errno()
//判斷連接數(shù)據(jù)庫是否成功
mysql_connect_error()
//輸出連接錯誤的錯誤信息
mysql_select_db()
//設置連接的數(shù)據(jù)庫
mysqli_set_charset()
//設置與MySQL數(shù)據(jù)庫傳送數(shù)據(jù)時使用的字符集
mysqli_query()
//執(zhí)行并發(fā)送SQL語句
mysqli_affected_rows()
//獲得前一次操作的所影響的行數(shù)
mysqli_fetch_all()
//從結(jié)果集中取出所有行作為關聯(lián)或索引、混合數(shù)組
mysqli_fetch_assoc()
//從結(jié)果集中取出所有行作為關聯(lián)數(shù)組
mysqli_fetch_row()
//從結(jié)果集中取出所有行作為索引數(shù)組
mysqli_fetch_array()
//從結(jié)果集中取出所有行作為混合數(shù)組
mysqli_insert_id()
//獲得上一次insert操作的id
mysqli_num_rows()
//獲得結(jié)果集中的記錄條數(shù)
mysqli_num_rows()
//獲得結(jié)果集中的記錄條數(shù)
mysqli_close()
//關閉數(shù)據(jù)庫連接

2. HP文件上傳函數(shù)/文件操作函數(shù)

deldot
in_array
intval
strrchr
strtolower
strrpos
str_ireplace
strstr
substr
trim
file_put_contents()
//函數(shù)把一個字符串寫入文件中夯膀。
fputs()
//函數(shù)寫入文件
copy — 拷貝文件
delete — 參見 unlink 或 unset
fflush — 將緩沖內(nèi)容輸出到文件
file_get_contents — 將整個文件讀入一個字符串
file_put_contents — 將一個字符串寫入文件
fputcsv — 將行格式化為 CSV 并寫入文件指針
fputs — fwrite 的別名
fread — 讀取文件(可安全用于二進制文件)
fscanf — 從文件中格式化輸入
fwrite — 寫入文件(可安全用于二進制文件)
move_uploaded_file — 將上傳的文件移動到新位置
readfile — 輸出文件
rename — 重命名一個文件或目錄
rmdir — 刪除目錄
unlink — 刪除文件

3. PHP命令執(zhí)行命令注入函數(shù)

popen()
pcntl_exec()
escapeshellarg — 把字符串轉(zhuǎn)碼為可以在 shell 命令里使用的參數(shù)
escapeshellcmd — shell 元字符轉(zhuǎn)義
exec — 執(zhí)行一個外部程序
passthru — 執(zhí)行外部程序并且顯示原始輸出
proc_close — 關閉由 proc_open 打開的進程并且返回進程退出碼
proc_get_status — 獲取由 proc_open 函數(shù)打開的進程的信息
proc_nice — 修改當前進程的優(yōu)先級
proc_open — 執(zhí)行一個命令茫叭,并且打開用來輸入/輸出的文件指針曹洽。
proc_terminate — 殺除由 proc_open 打開的進程
shell_exec — 通過 shell 環(huán)境執(zhí)行命令抽兆,并且將完整的輸出以字符串的方式返回莲祸。
system — 執(zhí)行外部程序憔狞,并且顯示輸出

4. PHP代碼執(zhí)行函數(shù)

eval()
//eval() 函數(shù)把字符串按照 PHP 代碼來計算蝴悉,如常見的一句話后門程序:<?php eval($_POST[cmd])?
assert()
//與eval類似,字符串被 assert() 當做 PHP 代碼來執(zhí)行
preg_replace()
//preg_replace()函數(shù)原本是執(zhí)行一個正則表達式的搜索和替換瘾敢,但因為存在危險的/e修飾符拍冠,使 preg_replace() 將 replacement 參數(shù)當作 PHP 代碼
create_function()
//create_function主要用來創(chuàng)建匿名函數(shù),如果沒有嚴格對參數(shù)傳遞進行過濾簇抵,攻擊者可以構造特殊字符串傳遞給create_function()執(zhí)行任意命令
array_map()
//array_map() 函數(shù)將用戶自定義函數(shù)作用到數(shù)組中的每個值上庆杜,并返回用戶自定義函數(shù)作用后的帶有新值的數(shù)組。 回調(diào)函數(shù)接受的參數(shù)數(shù)目應該和傳遞給 array_map() 函數(shù)的數(shù)組數(shù)目一致
call_user_func()/call_user_func_array ()
//call_user_func — 把第一個參數(shù)作為回調(diào)函數(shù)調(diào)用,其余參數(shù)是回調(diào)函數(shù)的參數(shù)碟摆。
//call_user_func_array — 調(diào)用回調(diào)函數(shù)晃财,并把一個數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù)
array_filter()

//array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
//依次將 array 數(shù)組中的每個值傳遞到 callback 函數(shù)。如果 callback 函數(shù)返回 true典蜕,則 array 數(shù)組的當前值會被包含在返回的結(jié)果數(shù)組中断盛。數(shù)組的鍵名保留不變。
usort()愉舔、uasort()
//usort() 通過用戶自定義的比較函數(shù)對數(shù)組進行排序钢猛。
//uasort() 使用用戶自定義的比較函數(shù)對數(shù)組中的值進行排序并保持索引關聯(lián) 。

5. PHP輸出/打印函數(shù)

echo()
print()
printf()
sprintf()
print_r()
var_dump()
die()

6. PHP文件下載

fopen()
//讀取文件
readfile()
file_get_contents()
highlight_file()  

7. PHP魔術方法

__construct()//每次創(chuàng)建新對象時先調(diào)用此方法轩缤,所以非常適合在使用對象之前做一些初始化工作

__destruct()//某個對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行

__call() //在對象上下文中調(diào)用不可訪問的方法時觸發(fā)

__callStatic() //在靜態(tài)上下文中調(diào)用不可訪問的方法時觸發(fā)

__get() //用于從不可訪問的屬性讀取數(shù)據(jù)

__set() //用于將數(shù)據(jù)寫入不可訪問的屬性

__isset() //在不可訪問的屬性上調(diào)用isset()或empty()觸發(fā)

__unset() //在不可訪問的屬性上使用unset()時觸發(fā)

__sellp() //使用serialize時觸發(fā)

__wakeup() //使用unserialize時觸發(fā)

__toString() //把類當作字符串使用時觸發(fā)

__invoke() //當腳本嘗試將對象調(diào)用為函數(shù)時觸發(fā)

__set_state()//當調(diào)用 var_export() 導出類時命迈,此靜態(tài)方法會被自動調(diào)用贩绕。

__clone()//當使用 clone 復制一個對象時自動調(diào)用

__debuginfo()//使用 var_dump() 打印對象信息時自動調(diào)用
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壶愤,隨后出現(xiàn)的幾起案子淑倾,更是在濱河造成了極大的恐慌,老刑警劉巖征椒,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娇哆,死亡現(xiàn)場離奇詭異,居然都是意外死亡陕靠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門脱茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剪芥,“玉大人,你說我怎么就攤上這事琴许∷胺荆” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵榜田,是天一觀的道長益兄。 經(jīng)常有香客問我,道長箭券,這世上最難降的妖魔是什么净捅? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮辩块,結(jié)果婚禮上蛔六,老公的妹妹穿的比我還像新娘。我一直安慰自己废亭,他們只是感情好国章,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豆村,像睡著了一般液兽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掌动,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天四啰,我揣著相機與錄音,去河邊找鬼粗恢。 笑死拟逮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的适滓。 我是一名探鬼主播敦迄,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罚屋?” 一聲冷哼從身側(cè)響起苦囱,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脾猛,沒想到半個月后撕彤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡猛拴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年羹铅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愉昆。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡职员,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跛溉,到底是詐尸還是另有隱情焊切,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布芳室,位于F島的核電站专肪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堪侯。R本人自食惡果不足惜嚎尤,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伍宦。 院中可真熱鬧诺苹,春花似錦、人聲如沸雹拄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滓玖。三九已至坪哄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間势篡,已是汗流浹背翩肌。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禁悠,地道東北人念祭。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像碍侦,于是被迫代替她去往敵國和親粱坤。 傳聞我的和親對象是個殘疾皇子隶糕,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容