国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

動態網頁PHP程序中文件上傳的安全問題

2024-05-04 23:02:55
字體:
來源:轉載
供稿:網友

php自動支持基于rfc 1867的文件上載,我們看下面的例子:

<form method="post" enctype="multipart/form-data">
<input type="file" name="hello">
<input type="hidden" name="max_file_size" value="10240">
<input type="submit">
</form>

上面的代碼讓用戶從本地機器選擇一個文件,當點擊提交后,文件就會被上載到服務器。這顯然是很有用的功能,但是php的響應方式使這項功能變的不安全。當php第一次接到這種請求,甚至在它開始解析被調用的php代碼之前,它會先接受遠程用戶的文件,檢查文件的長度是否超過“$max_file_size variable”定義的值,如果通過這些測試的話,文件就會被存在本地的一個臨時目錄中。

因此,攻擊者可以發送任意文件給運行php的主機,在php程序還沒有決定是否接受文件上載時,文件已經被存在服務器上了。

這里我就不討論利用文件上載來對服務器進行dos攻擊的可能性了。

讓我們考慮一下處理文件上載的php程序,正如我們上面說的,文件被接收并且存在服務器上(位置是在配置文件中指定的,一般是/tmp),擴展名一般是隨機的,類似“phpxxuoxg”的形式。php程序需要上載文件的信息以便處理它,這可以通過兩種方式,一種方式是在php 3中已經使用的,另一種是在我們對以前的方法提出安全公告后引入的。

但是,我們可以肯定的說,問題還是存在的,大多數php程序還是使用老的方式來處理上載文件。php設置了四個全局變量來描述上載文件,比如說上面的例子:

$hello = filename on local machine (e.g "/tmp/phpxxuoxg")
$hello_size = size in bytes of file (e.g 1024)
$hello_name = the original name of the file on the remote system (e.g "c://temp//hello.txt")
$hello_type = mime type of uploaded file (e.g "text/plain")

然后php程序開始處理根據“$hello”指定的文件,問題在于“$hello”不一定是一個php設置的變量,任何遠程用戶都可以指定它。如果我們使用下面的方式:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

就導致了下面的php全局變量(當然post方式也可以(甚至是cookie)):

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

上面的表單數據正好滿足了php程序所期望的變量,但是這時php程序不再處理上載的文件,而是處理“/etc/passwd”(通常會導致內容暴露)。這種攻擊可以用于暴露任何敏感文件的內容。

中國最大的web開發資源網站及技術社區,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵东县| 铅山县| 郸城县| 梅州市| 丘北县| 遵义市| 汕尾市| 名山县| 和顺县| 金门县| 长海县| 呼伦贝尔市| 夏津县| 乐业县| 海晏县| 疏附县| 修文县| 万州区| 洛浦县| 甘南县| 临清市| 鄂伦春自治旗| 南宁市| 南召县| 嘉鱼县| 增城市| 孝义市| 河西区| 佳木斯市| 巴彦县| 长岭县| 临潭县| 集贤县| 道孚县| 和平区| 宿迁市| 共和县| 汶川县| 永泰县| 四平市| 邢台县|