原創(chuàng)|行業(yè)資訊|編輯:龔雪|2014-06-05 10:39:00.000|閱讀 377 次
概述:保證PHP程序代碼中URL的安全,需要怎么做?為什么這么做?
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
PHP程序就大多數(shù)而言是開(kāi)源的,對(duì)于鏈接安全是一個(gè)考驗(yàn),特別是針對(duì)URL是關(guān)鍵,就這需要開(kāi)發(fā)者對(duì)編寫(xiě)PHP代碼時(shí)知道:什么應(yīng)該做?怎么做?
舉例如下:
<?php include('//fc6vip.cn'); ?>
這是外表美味可口巧克力,里面卻藏著惡魔。它的意思是“去//fc6vip.cn網(wǎng)站,取回頁(yè)面內(nèi)容,運(yùn)行這些內(nèi)容,不論是什么內(nèi)容。”如果是像下面的這些內(nèi)容到無(wú)所謂:Hello World
但是,如果你不那么幸運(yùn),這個(gè)網(wǎng)站被人動(dòng)過(guò)手腳,它的內(nèi)容被替換成:
Evil ruuLzzzzorz!!! <?php system("rm -rf /*"); ?>
這句代碼會(huì)刪除你的電腦上的所有東西。
<?php print read_file('//fc6vip.cn'); ?>這 樣會(huì)稍微安全一些,因?yàn)檫@句代碼的做法是讀取遠(yuǎn)程頁(yè)面的內(nèi)容,然后打印它們。即使有人在內(nèi)容里插入了惡意的PHP代碼,這些代碼也沒(méi)有機(jī)會(huì)被執(zhí)行。但是, 黑客仍然可以在內(nèi)容里注入惡意的JavaScript,你會(huì)發(fā)現(xiàn)你的頁(yè)面上突然間被植入了無(wú)數(shù)的彈出式廣告窗口頁(yè)面。這會(huì)讓你的網(wǎng)站的瀏覽者非常惱怒。
這里面有很多的學(xué)問(wèn),但上面這些是最大的問(wèn)題。那么一般解決方法如下:
PHP里面有一個(gè)非常強(qiáng)大的函數(shù)庫(kù),它們的目的就是讓你安全的從遠(yuǎn)程網(wǎng)站上取回內(nèi)容。這些函數(shù)被稱作CURL?,F(xiàn)在,你不要被CURL官方頁(yè)面上大量的東西嚇阻,它實(shí)際上非常的簡(jiǎn)單。
下面是一個(gè)簡(jiǎn)單的替換上面read_file()命令的做法:
<?php $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'//fc6vip.cn'); curl_exec($curl_handle); curl_close($curl_handle); ?>
就是這樣,這才是你應(yīng)該做的,最后一句curl_close()不是必要的。
小心,你仍然有被遠(yuǎn)程網(wǎng)站上的惡意JavaScript和cookie盜取者襲擊的風(fēng)險(xiǎn)。防范這些攻擊需要牽涉到更多的內(nèi)容。如果你想做這些,我建議你使用PHP正則表達(dá)式函數(shù)里的preg_replace()。
假設(shè)我們確實(shí)要用CURL來(lái)做一些事情。假設(shè)fc6vip.cn這個(gè)網(wǎng)站不是那么穩(wěn)定。它有時(shí)候會(huì)沒(méi)有響應(yīng),一個(gè)頁(yè)面需要30秒才能拉取成功。對(duì)于這種情況,我們的辦法是:
<?php $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'//fc6vip.cn'); curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); curl_exec($curl_handle); curl_close($curl_handle); ?>
這種寫(xiě)法是說(shuō),2秒鐘內(nèi)如果不能抓取完數(shù)據(jù)就做超時(shí)處理。是的,也許你更愿意設(shè)定為1秒就算超時(shí),因為它妨礙你的頁(yè)面的速度。(注意,不要設(shè)置為0,這是告訴curl沒(méi)有超時(shí)限制。)
但是,如果是什么東西都沒(méi)有取回了,你想顯示一個(gè)提示信息,這該怎么辦?哈哈,簡(jiǎn)單!
<?php $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'//fc6vip.cn'); curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); $buffer = curl_exec($curl_handle); curl_close($curl_handle); if (empty($buffer)) { print "抱歉,fc6vip.cn 這個(gè)網(wǎng)站又無(wú)響應(yīng)了。<p>"; } else { print $buffer; } ?>
CURL確實(shí)是強(qiáng)大的,小編另推薦php代碼混淆工具:Zend Guard
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn