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