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