就是extract你獲取的http以get形式傳遞過來的數(shù)據(jù)
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括甘孜州網(wǎng)站建設(shè)、甘孜州網(wǎng)站制作、甘孜州網(wǎng)頁制作以及甘孜州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,甘孜州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到甘孜州省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
然后判斷get過來的attempt的值
如果有有attempt的話就輸出x路徑下的文件的文本
然后判斷get過來的值是否與該文本的值相同
如果想聽則輸出該文本的值和另一個路徑為y的文本的值
如果都不滿足就輸出incorrect表示為連接
1.xss + sql注入
其中占大頭的自然是XSS與SQL注入,對于框架類型或者有公共文件的,建議在公共文件中統(tǒng)一做一次XSS和SQL注入的過濾。寫個過濾函數(shù),可由如下所示:
$_REQUEST = filter_xss($_REQUEST);
$_GET = filter_xss($_GET);
$_POST = filter_xss($_POST);
$_COOKIE = filter_xss($_COOKIE);
$_POST = filter_sql($_POST);
$_GET = filter_sql($_GET);
$_COOKIE = filter_sql($_COOKIE);
$_REQUEST = filter_sql($_REQUEST);
這里有一點(diǎn)需要說明,$_REQUEST雖然等于$_GET+$_POST,但他們是獨(dú)立的數(shù)組,也就是說假設(shè)改變了$_GET的值,但$_REQUEST的值還是原來的值,所以過濾時都不能落下,至于其他的如$_FILE之類的就可忽略了。
最簡單的filter_xss函數(shù)是htmlspecialchars()
最簡單的filter_sql函數(shù)是mysql_real_escape_string()
當(dāng)然,誰都知道這種過濾filter_sql只能過濾字符型和搜索型的注入,對于數(shù)字型是沒有辦法的,但也說明做了這層過濾后,只需在后面注意數(shù)字型的SQL語句就可以了,遇到了加intval過濾就可以了,這就變得容易多了。
2. 命令執(zhí)行
對于命令執(zhí)行,可以從關(guān)鍵字入手,總共可分為3類
(1) php代碼執(zhí)行 :eval等
(2)shell命令執(zhí)行:exec、passthru、system、shell_exec等
(3) 文件處理:fwrite、fopen、mkdir等
對于這幾類需要注意其參數(shù)是否用戶可控。
3.上傳漏洞
對于上傳漏洞,也是重點(diǎn)關(guān)注的地方,要仔細(xì)分析它的處理流程,針對上傳的繞過方式是很多的,最保險的方式:在保存文件是采用文件名隨機(jī)命名和后綴白名單方式。其次要注意的一點(diǎn)是上傳文件的地方可能不止一處,不要有遺漏,可能會碰到這樣的情況,突然在某個目錄里面包含了一個第三方的編輯器在里面。
文件包含漏洞涉及的函數(shù)如include() 、include_once()、require()、require_once()、file_get_contents()等
最常見的還是出在下載文件功能函數(shù),例如download.php?file=///etc/passwd 這種類型中。
4. 權(quán)限繞過
權(quán)限繞過可分為兩類吧
(1)后臺文件的未授權(quán)訪問。后臺的文件沒有包含對session的驗(yàn)證,就容易出現(xiàn)這樣的問題
(2)未作用戶隔離,例如mail.php?id=23顯示了你的信件,那么換個ID, mail.php?id=24就查看到了別人的信件,編寫代碼是方便,把信件都存在一個數(shù)據(jù)表里,id統(tǒng)一編號,前端展現(xiàn)時只需按id取出即可,但未作用戶隔離,判定歸屬,容易造成越權(quán)訪問。
這樣的例子是很常見的,給某銀行做評估是就經(jīng)常發(fā)現(xiàn)這種漏洞。
5. 信息泄露
信息泄露算是比較低危的漏洞了,比如列目錄這種就屬于部署問題,而與代碼審計(jì)無關(guān)了,而像暴路徑、暴源碼這種是需要防止的。曾經(jīng)遇到這樣的代碼
?php if(empty($_GET['a'])) {…} ?
表面上似乎沒問題,可是當(dāng)請求變?yōu)?xx.php?a[]=1時,即參數(shù)變?yōu)閿?shù)組的時候,就會發(fā)生錯誤以致路徑泄露,而用isset判斷則不會,當(dāng)然一個個防太麻煩,建議在配置文件中關(guān)閉錯誤提示,或者在公共文件中加入如下代碼以關(guān)閉錯誤顯示功能:
?php error_reporting(0);?
解決樓主的問題的方法就是,分開寫代碼,即:
$filearr = split(".",$filename);
$filetype = end($filearr);
split 函數(shù)用來分割字符串的時候,基本等同于函數(shù) preg_grep,分割表達(dá)式可以是一個正則表達(dá)式,也可以是一個普通字符串,所以本身的執(zhí)行效率很低,這一點(diǎn)你要記得……
所以,實(shí)現(xiàn)你現(xiàn)在的這個需求的話,最好用explode函數(shù),使用普通字符作為分割表達(dá)式……
但是也的確如樓上所說,split 函數(shù)(PHP里)已經(jīng)棄用,你可以使用 preg_match、preg_match_all 、preg_grep 等使用正則表達(dá)式作為分割的函數(shù)來替代。
就整個你的需求而言,你的思路還不很好,當(dāng)一個文件名是【a.b.c.d.e.f.g.php】的時候,程序要浪費(fèi)多余的資源來分割其實(shí)你不用的a、b、c……,
所以要簡單滿足你取后綴名的需求的代碼應(yīng)該是:
$filetype=substr(strrchr($filename,'.'),1);
此外還有:$path_info = pathinfo($filename); $filetype = $path_info['extension']; 其實(shí)不是很推薦。
下面比較一下它們各自的執(zhí)行效率:
設(shè)文件名是:aaa.bb.php、循環(huán)執(zhí)行10000次;執(zhí)行10次取平均值:
split + end :0.067644s
explode + end :0.016251s
pathinfo + ['extension'] :0.018983s
strrchr + substr :0.008611s
【以上文字現(xiàn)場版純手敲,2012-2-25 10:41,謝謝】