|
來源:ChinaASP
之所以翻譯這篇文章,是因為目前關于CGI安全性的文章都是拿Perl作為例子,而專門介紹ASP,php或者JSP安全性的文章則很少。Shaun Clowes的這篇文章比較全面地介紹了php的安全問題,原文可以在http://www.securereality.com.au/stu...arlet.txt找到。
由于原文比較長,而且有相當一部分是介紹文章的背景或php的基礎知識,沒有涉及到php安全方面的內容,因此我沒有翻譯。如果你想了解這方面的知識,請參考原文。
文章主要從全局變量,遠程文件,文件上載,庫文件,Session文件,數據類型和容易出錯的函數這幾個方面分析了php的安全性,并且對如何增強php的安全性提出了一些有用的建議。
好了,廢話少說,我們言歸正傳!
[全局變量]
php中的變量不需要事先聲明,它們會在第一次使用時自動創建,它們的類型也不需要指定,它們會根據上下文環境自動確定。從程序員的角度來看,這無疑是一種極其方便的處理方法。很顯然,這也是快速開發語言的一個很有用的特點。一旦一個變量被創建了,就可以在程序中的任何地方使用。這個特點導致的結果就是程序員很少初始化變量,畢竟,當它們第一次創建時,他們是空的。
很顯然,基于php的應用程序的主函數一般都是接受用戶的輸入(主要是表單變量,上載文件和Cookie等),然后對輸入數據進行處理,然后把結果返回到客戶端瀏覽器。為了使php代碼訪問用戶的輸入盡可能容易,實際上php是把這些輸入數據看作全局變量來處理的。
例如:
<FORM METHOD="GET" ACTION="test.php">
<INPUT TYPE="TEXT" NAME="hello">
<INPUT TYPE="SUBMIT">
</FORM>
很顯然,這會顯示一個文本框和提交按鈕。當用戶點擊提交按鈕時,“test.php”會處理用戶的輸入,當“test.php”運行時,“$hello”會包含用戶在文本框輸入的數據。從這里我們應該看出,攻擊者可以按照自己的意愿創建任意的全局變量。如果攻擊者不是通過表單輸入來調用“test.php”,而是直接在瀏覽器地址欄輸入http://server/test.php?hello=hi&set... 主站蜘蛛池模板: 青川县| 舟山市| 贵港市| 兴化市| 黔南| 靖安县| 龙川县| 古丈县| 白河县| 彭阳县| 济南市| 上栗县| 洮南市| 阳高县| 板桥市| 盘山县| 丹寨县| 靖宇县| 珠海市| 额尔古纳市| 镇江市| 宁津县| 疏附县| 泌阳县| 湖北省| 浏阳市| 渑池县| 平陆县| 鱼台县| 靖边县| 资阳市| 山东省| 三明市| 唐海县| 大厂| 阿尔山市| 河曲县| 浦北县| 资中县| 甘孜县| 石屏县|