php中有乙個讓人不解的特性,那就是,如果檔名中有".php",則會自動呼叫php引擎,當成php指令碼處理。
php的函式偽靜態也是這樣做出來的。
以下是函式偽靜態所用的函式:
# function makeurl($arr)
# $tmpurl=implode("_",$url);
# return $tmpurl.".htm";
# }
#
# function
parseurl()
# }
# }
# //使用例項,鏈結頁面
# $path=""; #
$path.=makeurl(array('blogid'=>2,'page'=>1));
# 以上兩行**生成頁面中的url。
# //瀏覽頁面,呼叫函式parseurl();直接可以使用變數$_get
當然,很多mvc框架中,均支援這樣的功能,但在mvc框架中,並不一定是用上面兩個函式實現的了。
其實,它不僅是偽靜態所需。同時也是mvc所必須要的功能。這是因為,mvc中的所謂的單一入口,也是憑此功能實現的。
我們可以見到很多**,鏈結象
實際是經過.htaccess,或者是urlrewrite處理過的。未處理之前是:
s.php一定是mvc的入口檔案。
這就是說,some.php.png,s.php/2/3/4/5.html這樣的檔案,均會當成php檔案被執行。
這也就引發了另乙個問題:
如果我上傳乙個檔案,名為:some.php.png,那我肯定能夠上傳成功。
因而,我就可以在上傳成功後,再次請求這乙個url。於是,黑客攻擊就能輕鬆實現。
當然,要阻止這一問題並不難,第一,我們可以在上傳目錄增加乙個.htaccess,內容如下,
order allow,deny
deny from all
很顯然,它的目的就是禁止檔案以php方式執行。
另外,最徹底的解決辦法,則是:對所有的上傳檔案均進行改名。即不儲存源檔名。如果要儲存,則必須去掉檔名中的"."以及其它可能有攻擊性的語法。
我們推薦的做法是不儲存源檔名,即對源檔名用md5或sha進行hash,如果要區分上傳時間,可以加上時間戳,即生成的是純a-z0-9文字的檔名。最後加上原始副檔名即可。
另註:來至於:
PHP框架如何實現MVC模式以及單一入口
這裡不詳細講解何為mvc模式,只是簡單介紹,關於mvc的具體資訊可以去網路上找尋,mvc模式在我理解來它將乙個專案分解成三部分,分別是model 模型 view 檢視 controller 控制器 這三個單詞的縮寫組合即為mvc.mvc是一種普遍的軟體敏捷開發模式,在許多領域特別是桌面程式設計領域早...
PHP 單一入口的特有作用
在說單一入口之前,先說說多入口。discuz phpcms 2008,dedecms 都是採用多入口的結構。多入口,即通過訪問不同的 php 檔案執行對應的功能。如 index.php 首頁 show.php?id 1 內容頁 list.php?page 2 列表頁 login.php 使用者登入頁...
轉php單一入口框架設計
說到php單入口模式,很快想到關於php的一些框架,zend,thinkphp,qeephp,還有cakephp 等,它們都採用了統一的入口,可以根據不同的需要,分前台入口後台入口或者其他操作許可權入口,這樣的設計模式優點很明顯,比如。許可權控制,url重寫,結 合mvc清晰地目錄結構。這些都是單入...