臨時(shí)文件,顧名思義是臨時(shí)產(chǎn)生的文件,且文件的生命周期很短。  然而,很多應(yīng)用的運(yùn)行都離不開(kāi)臨時(shí)文件,臨時(shí)文件在我們電腦上無(wú)處不在,主要有以下幾種形式的臨時(shí)文件:1.文件或圖形編輯程序,所生成的中間文件
2. " /> 亚洲人成网站在线观看播放青青,在线观看黄日本高清视频,国产在线成人一区二区

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP臨時(shí)文件的安全性分析

一、簡(jiǎn)介
  臨時(shí)文件,顧名思義是臨時(shí)產(chǎn)生的文件,且文件的生命周期很短。

  然而,很多應(yīng)用的運(yùn)行都離不開(kāi)臨時(shí)文件,臨時(shí)文件在我們電腦上無(wú)處不在,主要有以下幾種形式的臨時(shí)文件:

1.文件或圖形編輯程序,所生成的中間文件
2.數(shù)據(jù)庫(kù)查詢時(shí),生成的臨時(shí)緩存文件,提供之前的結(jié)果數(shù)據(jù)而,以減少再次訪問(wèn)數(shù)據(jù)庫(kù)的代價(jià);通常用于遠(yuǎn)程數(shù)據(jù)庫(kù)或遠(yuǎn)程xml的服務(wù)
3.文件被上傳后在服務(wù)端的臨時(shí)儲(chǔ)存,其文件名為php的全局變量$_FILES['userfile']['tmp_name']的值
4.在http請(qǐng)求中,用于存放session的臨時(shí)文件,這些文件名通常就是sessionid(如 sess_7483ae44d51fe21353afb671d13f7199)
5.在不同應(yīng)用或相同應(yīng)用傳遞數(shù)據(jù),而對(duì)方要求基于文件的輸入,此時(shí)用臨時(shí)文件存放數(shù)據(jù)

二、臨時(shí)文件的安全特征

  臨時(shí)文件的最大特征就是它的非持久性,除此之外,從安全性的角度,可以從以下幾個(gè)方面關(guān)注臨時(shí)文件的其它特點(diǎn)或風(fēng)險(xiǎn):

1.臨時(shí)文件的位置

  臨時(shí)文件通常被創(chuàng)建并存放在默認(rèn)的路徑,在一個(gè)典型的Linux系統(tǒng)中,至少有兩個(gè)目錄或分區(qū)保持著臨時(shí)文件。其中之一是/tmp目錄,再者是/var/tmp。在更新的Linux內(nèi)核的系統(tǒng)中,還可能有/dev/shm,它是用tmpfs文件系統(tǒng)裝載的。有時(shí)臨時(shí)文件,也可能放在用戶home目錄下的隱藏子目錄中。使用默認(rèn)臨時(shí)文件目錄的好處在于,系統(tǒng)進(jìn)程可以方便查找和讀寫。

  然而,默認(rèn)臨時(shí)文件的存放目錄可能成為損害系統(tǒng)安全的僵尸和rootkit的溫床。這是因?yàn)樵诙鄶?shù)情況下,任何人(或任何進(jìn)程)都可以向這些目錄寫入東西,有不安全的許可問(wèn)題。比如我們都知道sticky bit,該位可以理解為防刪除位。如果希望用戶能夠添加文件但同時(shí)不能刪除文件, 則可以對(duì)文件使用sticky bit位。設(shè)置該位后,就算用戶對(duì)目錄具有寫權(quán)限,也不能刪除該文件。多數(shù)Linux發(fā)行版本在臨時(shí)目錄上設(shè)置sticky位,這意味著用戶A不能清除屬于用戶B的一個(gè)文件,反之亦然。但是,根據(jù)文件自身的許可,用戶A有可能查看并修改那個(gè)文件的內(nèi)容。

2.臨時(shí)文件的持久性

  前面提到臨時(shí)文件是非持久的,在程序結(jié)束時(shí),會(huì)被刪除,但有的時(shí)候臨時(shí)文件也會(huì)被迫持久保存了,沒(méi)有被刪除,如:

2.1 應(yīng)用程序在關(guān)閉前崩潰了,還沒(méi)有機(jī)會(huì)刪除臨時(shí)文件
2.2 應(yīng)用程序還跑著,但操作系統(tǒng)崩潰了
2.3 文件復(fù)制過(guò)程中由于空間問(wèn)題而復(fù)制失敗,導(dǎo)致中間文件沒(méi)有刪除
2.4 操作系統(tǒng)進(jìn)程通常會(huì)定期清空的默認(rèn)臨時(shí)文件目錄,但可能因?yàn)槟承┰颍鴦h除失敗
2.5 寫得不好的應(yīng)用程序,可能忽略或者忘記了刪除臨時(shí)文件

3.臨時(shí)文件的風(fēng)險(xiǎn)性

  無(wú)用的臨時(shí)文件像幽靈一樣存在你的服務(wù)器上,一方面占用硬盤,另一方面,可以被其它人非法使用,存著如下一些風(fēng)險(xiǎn):

3.1 可見(jiàn)性

  眾所周知,將私有數(shù)據(jù)公開(kāi)很有風(fēng)險(xiǎn)。一旦用戶通過(guò)某些手段(如shell或者ftp)竊取了你的臨時(shí)文件,就可以獲取到用戶或企業(yè)的私有數(shù)據(jù),從而對(duì)你造成影響。

  例如:臨時(shí)文件2011_Confidential_Sales_Strategies.tmp,可能暴露你們公司2011年的商業(yè)策略,這對(duì)你的競(jìng)爭(zhēng)對(duì)手來(lái)說(shuō),將很有用處;而對(duì)于session劫持者來(lái)說(shuō),存放用戶session信息的臨時(shí)文件sess_95971078f4822605e7a18c612054f658非常關(guān)鍵。

  除此之外,還有別的情況臨時(shí)文件可能會(huì)被偷窺,如:一個(gè)拼寫檢查的服務(wù),返回結(jié)果的url是:http://bad.example.com/spellcheck.php?tmp_file=spellcheck46 ,攻擊者分析你的url參數(shù)后使用http://bad.example.com/spellcheck.php?tmp_file=spellcheck45 就可以訪問(wèn)到前一個(gè)用戶的驗(yàn)證結(jié)果了。

3.2 可執(zhí)行性

  通常臨時(shí)文件是不可執(zhí)行,但如果攻擊者上傳了一個(gè)php腳本到你的臨時(shí)目錄,而且通過(guò)某種方式執(zhí)行了它,那可能造成悲劇了。

3.3 臨時(shí)文件被劫持

  攻擊者可能為了自己的目的,而劫持你的臨時(shí)文件。他可能替換你的臨時(shí)文件,也可能在你的臨時(shí)文件后面追加一些信息。

  劫持臨時(shí)文件的目的包括:

(1)讓你的應(yīng)用程序處理他的數(shù)據(jù),而不是你自己的數(shù)據(jù)
(2)暴露隱私數(shù)據(jù),比如系統(tǒng)的密碼文件,或者其它php安全模式不能正常讀的文件
(3)刪除數(shù)據(jù),阻礙請(qǐng)求的正常進(jìn)行
(4)創(chuàng)建并輸出虛假的數(shù)據(jù),破壞請(qǐng)求的結(jié)果
(5)通過(guò)提供虛假的數(shù)據(jù),對(duì)使用數(shù)據(jù)進(jìn)行下一步處理的應(yīng)用程序造成破壞
(6)將你的輸出重定向到其它地方,可以方便攻擊者訪問(wèn)或者覆蓋系統(tǒng)文件

  劫持通常與競(jìng)爭(zhēng)條件相關(guān)。當(dāng)兩個(gè)不同的進(jìn)程操作同一個(gè)文件的時(shí)候,就可能產(chǎn)生競(jìng)爭(zhēng)條件。例如,一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程同時(shí)操作一段數(shù)據(jù),當(dāng)寫進(jìn)程只完成了一部分的時(shí)候,讀進(jìn)程已經(jīng)完成,這樣讀的到內(nèi)容一部分是新的,一部分是舊的,也就是我們常說(shuō)的讀臟數(shù)據(jù)。

  臨時(shí)文件的劫持,在一定程度上會(huì)造成競(jìng)爭(zhēng)條件,除非劫持者準(zhǔn)確的把握時(shí)間和位置,否則就會(huì)造成此類安全問(wèn)題。

三、預(yù)防臨時(shí)文件被惡意使用

  前面我們介紹了臨時(shí)文件的概念,以及臨時(shí)文件被惡用可能帶來(lái)的危害,這個(gè)部分主要介紹一些策略來(lái)預(yù)防臨時(shí)文件被惡意利用,以及減少其帶來(lái)的危害。

1.調(diào)整存放位置

  防止臨時(shí)文件被惡意利用的最重要,也是最簡(jiǎn)單的一步就是讓你的臨時(shí)文件目錄以及名字不容易被猜到。任何對(duì)臨時(shí)文件的惡意利用,攻擊者都必須知道臨時(shí)文件的名字和路徑,因此你應(yīng)該盡可能的讓他難以猜到你的臨時(shí)文件名字及路徑。

  建議你在臨時(shí)文件目錄的選擇時(shí),還是將你的臨時(shí)文件放在默認(rèn)的目錄下吧,這樣系統(tǒng)進(jìn)程可以方便找到以及讀寫。而把精力花費(fèi)放在為文件名想個(gè)合適的難猜的名字。

  php的tempnam()函數(shù),可以創(chuàng)建一個(gè)臨時(shí)文件,并且其自動(dòng)生成的文件名不會(huì)與當(dāng)前目錄下的其它文件名沖突,此函數(shù)創(chuàng)建的文件默認(rèn)權(quán)限是600,即rw――-。

例如

$filename = tempnam( ‘..', ‘myTempfile');

  運(yùn)行后可能生成一個(gè)名為myTempfile1af的文件,當(dāng)?shù)诙芜\(yùn)行的時(shí)候就生成了名為myTempfile1b0的文件名。
也許一些編程實(shí)踐指南會(huì)建議你在使用tempnam()生成文件的時(shí)候,用一些有意義的前綴來(lái)命名,這樣能通過(guò)文件名看出文件中包含的數(shù)據(jù)或者需要此數(shù)據(jù)的應(yīng)用,但從安全性的角度來(lái)看最好不要這樣,這樣等于為攻擊者指明了方向。

  這里介紹一種方法,即能有一定意義的前綴同時(shí)也讓攻擊者不那么好猜,如下:

<?php// define the parts of the filenamedefine(‘TMP_DIR','/tmp/');$prefix = ‘skiResort';// construct the filename$tempFilename = uniqid( $prefix, TRUE );// create the filetouch( $tempFilename );// restrict permissionschmod ( $tempFilename, 0600 );// now work with the file// … assuming data in $valuefile_put_contents( $tempFilename, $value );// …// when done with temporary file, delete itunlink ( $tempFilename );?>

 這個(gè)腳本通過(guò)uniqid()函數(shù),生成的文件名格式為:/tmp/skiResort392942668f9b396c08.03510070,并通過(guò)chmod將文件的權(quán)限設(shè)置為600。

  如果你需要與其它應(yīng)用共享信息,比如用戶密碼或運(yùn)行時(shí)生成的隨機(jī)token,這里你可能需要對(duì)文件名加密,只有知道這個(gè)密鑰的應(yīng)用程序才能讀取或修改文件內(nèi)容。

  如下是一個(gè)簡(jiǎn)單的生成加密文件名文件的示例:

<?php$pathPrefix = ‘/tmp/skiResort';// for demonstration, construct a secret here$secret = ‘Today is ‘ . date( “l(fā), d F.” );$randomPart = sha1( $secret );$tempFilename = $pathPrefix . $randomPart;touch( $tempFilename );chmod ( $tempFilename, 0600 );// now work with the file// … assuming data in $valuefile_put_contents( $tempFilename, $value );// …// when done with temporary file, delete itunlink ( $tempFilename );?>

2.約束訪問(wèn)權(quán)限

  為了降低臨時(shí)文件被執(zhí)行或劫持的可能性,需要設(shè)置臨時(shí)文件和臨時(shí)文件目錄的訪問(wèn)權(quán)限。通常情況下,將臨時(shí)文件的權(quán)限設(shè)置為rw――-,臨時(shí)文件目錄的權(quán)限設(shè)置為rwx――。

  此外,也可以通過(guò)設(shè)置apache的配置文件來(lái)限制訪問(wèn)(只有你將臨時(shí)文件放在www目錄下的時(shí)候),如下:

order deny,allowdeny from all

3.只寫已知文件

  既然你是臨時(shí)文件的創(chuàng)建者和作者,那你應(yīng)該隨時(shí)知道哪些文件存在,文件里有哪些內(nèi)容。前面提到的方法,只是讓臨時(shí)文件劫持更困難,但不能完全杜絕劫持者替換文件或者在文件后面追加一些內(nèi)容的可能,所以在你創(chuàng)建或?qū)懳募r(shí),需要仔細(xì)檢查文件內(nèi)容是否滿足要求。

當(dāng)你使用w+的方式,創(chuàng)建了一個(gè)文件,在你開(kāi)始寫之前,這個(gè)文件應(yīng)該為空,如下

<?phpif ( filesize( $tempFilename ) === 0 ) {// write to the file} else {exit ( “$tempFilename is not empty./nStart over again.”);}?>

  如果文件不為空,可能你創(chuàng)建的有問(wèn)題,也有可能劫持者在你創(chuàng)建與寫文件的這個(gè)時(shí)間段內(nèi)作了手腳。

還有可能,你第一次成功寫入了臨時(shí)文件,但在你后面的寫的過(guò)程中,劫持者對(duì)這個(gè)臨時(shí)文件進(jìn)行了一些操作,這種情況可以通過(guò)檢驗(yàn)碼的方式來(lái)檢查,如下:

<?php// write something to the file; then hash it$hashnow = sha1_file( $tempFilename );$_SESSION['hashnow'] = $hashnow;// later, get ready to write again$hashnow = sha1_file( $tempFilename );if ( $hashnow === $_SESSION['hashnow'] ) {// write to the file again// get and save a new hash$hashnow = sha1_file( $tempFilename );$_SESSION['hashnow'] = $hashnow;} else {exit ( “Temporary file contains unexpected contents./nStart over again.”);}?>

4.只讀已知文件

  與只寫已知文件類似,在讀文件前需要檢查檢驗(yàn)碼是否一致,防止臨時(shí)文件被篡改。除此之外,如果你使用了openssl,可以在寫文件的時(shí)候,將合法證書放在文件的末尾,這樣的讀的時(shí)候可以先檢查文件末尾是否存在合法的證書;如果你沒(méi)有使用openssl,也可以寫入一段特定的算法生成的token,原理類似。

5.檢查上傳的文件

  判斷文件是否是通過(guò) HTTP POST 上傳的

bool is_uploaded_file ( string $filename )

  如果 filename 所給出的文件是通過(guò) HTTP POST 上傳的則返回 TRUE。這可以用來(lái)確保惡意的用戶無(wú)法欺騙腳本去訪問(wèn)本不能訪問(wèn)的文件,例如 /etc/passwd。 如果上傳的文件有可能會(huì)造成對(duì)用戶或本系統(tǒng)的其他用戶顯示其內(nèi)容的話,這種檢查顯得格外重要。

  為了能使 is_uploaded_file() 函數(shù)正常工作,必須指定類似$_FILES['userfile']['tmp_name'] 的變量,而不是從客戶端上傳的文件名 $_FILES['userfile']['name']。需要注意的是is_uploaded_file返回false,不一定是上傳文件被劫持了,也有可能是文件太大或者上傳部分等,這些可以通過(guò)$_FILES['userfile']['error']查看。

php技術(shù)PHP臨時(shí)文件的安全性分析,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成+人+综合+亚洲不卡 | 黄网站在线播放 | 国产黄频在线观看高清免费 | 国产精品成人久久久 | 国产91精品高清一区二区三区 | 久久久久久久免费 | 欧美亚洲激情视频 | 怡红院最新网址 | 久久国产加勒比精品无码 | 一区二区三区成人 | 一区二区视频在线播放 | 亚洲欧美一区二区三区麻豆 | 中文字幕1区 | 91视频免费网址 | 色悠久 | 91精品国产免费自在线观看 | 精品福利视频网 | 欧美日本一区亚洲欧美一区 | 欧美特黄a级高清免费看片 欧美特黄a级片 | 品色视频 | 日韩精品欧美亚洲高清有无 | 亚洲欧洲日产国码 最新 | 亚洲国产第一 | 福利精品 | 伊人俺去久久涩五月综合 | 亚洲激情中文字幕 | 国产精品美女在线观看 | 欧美日韩国产亚洲一区二区三区 | 狠狠色狠狠色综合网 | 中文一区二区在线观看 | 国产精品久久久久无码av | 久久一区二区三区免费 | 成人精品视频在线观看 | 国产精品社区在线观看 | 亚洲综合图片人成综合网 | caoporn人人| 四川农村女人一级毛片 | 欧美性满足hd1819 | 国产片欧美片亚洲片久久综合 | 日本www在线观看 | 91视频久久 |