2013-02-12 39 views
0

我正在尋找將應用程序的圖像存儲在MSSQL數據庫中。 (據我所知,有這樣或文件系統存儲是否是更好的一些爭論,這是另一個線程雖然)。我看的線沿線做類似http://forum.codecall.net/topic/40286-tutorial-storing-images-in-mysql-with-php/但笨東西,東西:使用PHP在DB中存儲圖像時的安全/消毒

foreach ($_FILES as $upload_name => $info) { 
    if ($info['name']) { 
     // Temporary file name stored on the server 
     $tmpName = $info['tmp_name']; 

     // Read the file 
     $fp  = fopen($tmpName, 'r'); 
     $data = fread($fp, filesize($tmpName)); 
     fclose($fp); 

     //model code consolidated here for ease of question-asking 
     $db = $this->load->database(); 
     $stmt = $db->insert('my_table', array('image' => $data)); 
    } 
} 

我的問題大多是沿着安全線。基本上我有什麼特別的擔心,我應該有消毒圖像二進制數據插入與其他類型的字符串數據?我從上面鏈接的站點的代碼中拿出addslashes(),因爲我知道CI的活動記錄自己做了一些消毒,但我不知道是否最好擁有它(或者完成其他一些準備工作)。

+0

安全意義何在?什麼是你害怕發生的事情的例子?順便說一下:'addslashes'不應該用於SQL查詢中的參數轉義,這不是它的目的。你只是在問關於SQL注入或其他什麼? – 2013-02-12 22:52:39

+0

如果你的數據是一個blob,並且你從不操縱它,否則沒有理由對它進行消毒。重要的問題是:如何從存儲中讀取數據時使用這些數據?您是否將其存儲在客戶端的臨時文件中? – didierc 2013-02-12 23:16:19

+0

@WesleyMurch是的,幾乎只是想知道SQL注入;沒有存儲圖像數據庫之前,所以不能確定是否有額外的擔憂。 – rosalindwills 2013-02-12 23:23:51

回答

2

如果我正確理解你的問題,只要你用它存儲了file_type(文件的MIME類型)並且帶有二進制數據的MIME類型,就不必擔心它。然後,無論何時處理數據,都要確保使用適當的Mime類型,因此即使它們上傳了病毒腳本,也可以確保它僅作爲圖像呈現,而不是讓服務器或瀏覽器處理它。

除此之外,我不認爲你需要將上傳到內存並嘗試擦洗它。

+0

保持跟蹤的MIME類型確實是必不可少的。我想知道如果發現文件的真實類型(在用戶錯誤的情況下)會是一件好事。 – didierc 2013-02-13 04:06:04