臨時檔案通常用來儲存無法儲存在記憶體中的資料,或者傳遞給必須從檔案讀取的外部程式。一般我們會在/tmp目錄下生成唯一的檔名,但是安全的建立臨時檔案並不是那麼簡單,需要遵守許多規則。永遠不要自己去嘗試做這件事,而是要借助庫函式實現。而且也要小心清理臨時檔案。
臨時檔案引起的最大問題就是,可以**檔名,導致惡意使用者可以**臨時檔名,從而建立軟鏈結劫持臨時檔案。
建立臨時檔案一般使用的模組就是tempfile,此模組庫函式常用的有以下幾個:
tempfile.mktemp # 不安全,禁止使用
tempfile.mkstemp # 隨機建立tmp檔案,預設建立的檔案在/tmp目錄,當然也可以指定(可以使用)
tempfile.temporaryfile # 記憶體中建立檔案檔案不會儲存在磁碟,關閉後即刪除(可以使用)
te 當delete=true時,作用跟上面一樣,當是false時,會儲存在磁碟(可以使用)
以下幾種方式分別介紹了安全的建立臨時檔案及不安全的方式。
不正確1:
import os
import tempfile
# this will most cerwww.cppcns.comtainly put you at risk
tmp = os.path.join(tempfile.gettempdir(), filename)
if not os.path.exists(tmp):
with open(tmp, "w") file:
file.write("defaults")
不正確2:
import os
import tempfile
open(tempfile.mktemp(), "w")
不正確3:
filename = "{}/{}.tmp".format(tempfile.gettempdir(), os.getpid())
open(filename, "w")
正確1:
fd, path = tempfile.mkstemp()
try:
with os.fdopen(fd, 'w') as tmp:
# do stuff with temp file
tmp.write('stuff')
finally:
os.remove(path)
正確2:
# 控制代碼關閉,檔案即刪除
with tempfile.temporaryfile() as tmp:
# do stuff with tmp
tmp.write('stuff')
正確3:
tmp = twww.cppcns.comempfile.namedtemporaryfile(delete=true)
try:
# do stuff with temp
tmp.write('stuff')
finally:
tmp.close() # 檔案關閉即刪除
如何使用臨時檔案
python為我們提供了乙個標準庫來處理臨時檔案,所誤謂臨時檔案就是寫在硬碟上,關機就刪除,臨時檔案分為有名字的和無名字的,分別對應為 temporaryfile namedtempporaryfile,這裡不討論python2.x寫法,form tempfile import temporaryf...
bash 臨時檔案
1.臨時檔案目錄 tmp 使用者可以隨時隨地利用mktemp命令建立臨時檔案與 tmp目錄,這個目錄在每次系統啟動時都會被清空,因此裡面的檔案都是臨時使用的 不能永久儲存 用完就不管的。任何賬戶都有權在 tmp目錄下建立臨時檔案,完整的讀寫許可權全都給建立它的屬主,並且其它賬戶無權訪問它。2.使用m...
android臨時檔案
activity 1.啟動乙個新的activity 會呼叫oncreate onstart onresume 2.onpause protected void oncreate protected void onstart 當activity被使用者看到時,呼叫 protected void onr...