標籤:攻擊 php 版本號碼 lsp 建立 檔案 bsp cells tab
在上篇隨筆中我們已經知道了tp架構的四種訪問方式,那麼當在地址欄輸入不存在的操作方法、控制器會怎麼樣呢?
先看一下定義:
空操作:一個對象(控制器)調用本身不存在的方法
空控制器:在執行個體化控制器對象的時候,沒有找到指定的類
首先,在Application檔案下建立Ceshi模組,並在Ceshi模組下按照Home模組建立相同的檔案夾,如:
1)在Controller檔案夾下建立Login控制器:
| 12345678910 |
<?phpnamespace Ceshi\Controller;use Think\Controller;class LoginController extends Controller{ public function login() { echo "歡迎登陸!"; }} |
2)地址欄輸入訪問地址:http://localhost/wamp/thinkphp/index.php/Ceshi/Login/login
一、 在地址欄訪問不存在的方法,會怎麼樣?
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss
通過此頁面,我們可以知道:
(1)這樣的介面暴露了我們是用什麼工具寫的代碼,同時暴露了thinkphp的版本號碼,如果駭客找到該版本號碼的漏洞就可以攻擊你了。
(2)其次,這樣的介面很不友好,對於使用者來說,他們看不懂也不知道是哪裡出錯了。
如何給出更為安全、更為友好的提示呢?
父類中有個方法如,我們可以仿照這個來做:
第一種方法:做一個空的模板
1)在View檔案夾下建一個Ceshi檔案夾,路徑如下:
loginsss.html
| 12345678910111213 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title><style type="text/css">*{ margin:0px auto; padding:0px}</style></head><body><div>您訪問的操作方法有誤!</div></body></html> |
2) 再次訪問http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss
這樣相比只出現代碼要友好的多,但是,我們不可能每輸入一個不存在的方法就做一個模板,這樣不切實際,再說我們也不知道使用者下一次會輸入什麼樣的操作方法,所以這種方法並不可行。
第二種方法:做一個空的方法:_empty()方法
| 12345678910111213 |
<?phpnamespace Ceshi\Controller;use Think\Controller;class LoginController extends Controller{ public function login() { echo "歡迎登陸!"; } public function _empty(){ echo "您訪問的操作方法不存在!"; }} |
這樣不論訪問到什麼樣的空方法都會顯示“您訪問的操作方法不存在!”
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/logins
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/aaa
二、 在地址欄訪問不存在的控制器,會怎麼樣?出現同樣的報錯
解決方案:
建立一個Empty控制器:
EmptyController.class.php
| 123456789 |
<?phpnamespace Ceshi\Controller;use Think\Controller;class EmptyController extends Controller{ public function _empty(){ echo "您訪問的控制器有誤哦"; }} |
再訪問http://localhost/wamp/thinkphp/index.php/Ceshi/Main/login
換個 http://localhost/wamp/thinkphp/index.php/Ceshi/MMMn/login
這樣就可以解決空控制器和空操作的問題了~.~.~
tp的url和基本屬性狀態