php函式偽靜態 MVC單一入口與檔案上傳安全漏洞

2022-08-28 17:15:24 字數 1227 閱讀 4536

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清晰地目錄結構。這些都是單入...