對於無副檔名的PHP程式的研究
作者:PHP
環境:WinXp Pro + Apache 2.0.49 + PHP 4.3.5 (Module)
將沒有副檔名的PHP代碼,給PHP解譯器解釋,好處在於大大增加了安全性,給入侵的人、盜鏈的人,增加了迷惑性。例如:
http://www.msger.net/chat?username=Hackfan
http://www.msger.net/images/test.gif
從一般認識來看,上文的2個URL很有可能是這樣的:
/
|-chat/
????? |-index.php
|-images/
????? |-test.gif
但是Apache + PHP可以讓chat、images變成一個PHP程式,而把後面的部分作為參數。事實上,這2個URL很有可能:
/
|-chat.??? (PHP File)
|-images.? (PHP File)
|-imagessecret/? (Directory)
而http://www.msger.net/images/test.gif將交給images這個PHP程式來處理。下面給出這個程式的部分環境變數:
_SERVER["REQUEST_URI"] = /images/test.gif
_SERVER["SCRIPT_NAME"] = /images
_SERVER["PATH_INFO"]?? = /test.gif
_SERVER["PHP_SELF"]??? = /images/test.gif
大家注意到了,Apache除了對_SERVER["SCRIPT_NAME"]有正確的判斷以外,其他的資訊幾乎都是被我們欺騙了。不知道大家想到利用這個性質我們可以做什麼,反正我想到了可以防止圖片被盜鏈。
另外,找遍了很多資料,最後還是通過自己,使得Apache能夠對沒有副檔名的PHP檔案進行正確的解釋:
修改httpd.conf,找到,增加:DefaultType application/x-httpd-php
最後一些遺留問題:
對於http://www.msger.net/images/../test.gif這類的請求,伺服器會如何處理呢?不要用IE發送這樣的請求,因為IE自動會處理。