2010-01-07 80 views
1

我正在開發一個小CGI應用程序(在C中,CGIC,http://www.boutell.com/cgic/)。我的應用程序需要創建一個臨時 文件(用戶上傳圖像,將其保存,以各種方式進行修改,然後 然後顯示回給用戶)。CGI - 臨時文件

創建臨時文件時應採取哪些預防措施?

修飾的圖像通過一個CGI腳本,它隨後從磁盤的臨時文件動態地提供:

類似的東西: <html><head><title>here's your modified image</title></head><body><img src="cgi-bin/genimage.cgi?uid=5423423 /></body>

然而,惡意用戶可以上載圖像和從未請求修改後的圖像,這樣就填滿了硬盤。

我應該定期刪除未使用的文件嗎?

非常感謝!

+0

你似乎已經回答了你自己的問題.....是定期刪除文件。嘗試記錄一個連接/ IP有多少文件,如果它們超過了閾值,則關閉IP幾分鐘。 – 2010-01-07 19:02:14

回答

1

如果您的存儲空間有限,而且您的數據量不明,則需要決定在可以存儲更多數據時應採取的措施。這將會以某種方式出現。如果您假裝提供無限存儲空間,則在您無法存儲時會出現DoS。

任何戰略大概分爲以下兩個(3,如果可能的話)的方式:

在高水位時,

  1. 下降的最古老的/最想要的數據,以騰出空間
  2. 下降傳入數據以避免變滿
  3. 暫停傳入數據,直到回到低位標記

2和3仍然需要您以某種方式查找新存儲,因此必須刪除某些內容或者需要更多存儲空間。 1是非常自我維護的,但可能通過發送足夠的新垃圾來清除所有有用的舊數據。建立一個排名系統(最後訪問,大多數訪問,由特權用戶加載,組合這些...)和刪除最不重要可能是最好的平衡的事情。

0

使用CGI進行直接應用程序設計是有問題的 - 即不是web框架/應用程序引擎。我會建議使用Java進行圖像處理,或者將其封裝在lua或python中。

如果繼續使用C,請確保您限制CGI執行環境,將其放入監獄,請檢查this post以獲得一些靈感,here是另一個。