2013-07-06 66 views
0

我想知道這件事的安全性。我只想要允許最大大小爲64 KB的gif圖像。使用accept屬性安全嗎?即accept="image/gif"安全上傳gif圖片

非常小的PHP:

if (isset($_REQUEST['upload'])) { 
move_uploaded_file($_FILES['file']['tmp_name'], '../images/logos/'.str_replace(" ", "_", $name).'.gif'); 
} 

我的形式如下:

<form action="upload.php" method="post" enctype="multipart/form-data"> 
<input type="hidden" name="MAX_FILE_SIZE" value="65536"> 
<input type="file" name="file" size="40" accept="image/gif"> 
</form> 

使用accept屬性現在是它的安全?

回答

2

絕對不是,因爲人們可以在客戶端更改頁面代碼並將所需的任何內容提交給服務器。這也適用於文件大小。您應該驗證文件服務器端,檢查其MIME內容類型。你可以用getimagesize()函數來完成。

提高你的服務器端代碼:

if (isset($_REQUEST['upload'])) { 
    list(,, $image_type) = @getimagesize($_FILES['file']['tmp_name']); 

    if (filesize($_FILES['file']['tmp_name']) <= 65536 
      && $image_type === IMAGETYPE_GIF) { 
     move_uploaded_file($_FILES['file']['tmp_name'], 
      sprintf('../images/logos/%s.gif', str_replace(' ', '_', $name))); 
    } 
} 

可以改善甚至更分裂的檢查,提高錯誤信息給用戶。我會留給你的。

1

不信任。

如果內容來自網絡,當您得到它時假定一切都是錯誤的。

在Web應用程序中,您放入HTML中的任何內容都不應被視爲服務器端的真正安全機制。 HTML和JS提供的工具對於提供良好的用戶體驗以及幫助減少發送回服務器的基本錯誤數量非常有幫助,但不良演員會簡單地繞過您的HTML/JS保護併發送他們喜歡。更有趣的是,即使在低流量的網站上,機器人也會測試基本錯誤的表單,如果你不小心,可以用垃圾填滿你的服務器。

你需要做好準備,以防止(至少):

  • 錯誤的文件類型(一個機器人可能會快速測試這一點)。
  • 文件太大(機器人可能會很快測試)。
  • 文件名稱中的字符在服務器的文件系統上無效(很少,但出現)。
  • 文件中的惡意內容(如果您準備讓公衆對這些內容感到擔憂)。