欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PHP臨時(shí)文件的安全性怎么樣-創(chuàng)新互聯(lián)

這篇文章主要介紹“PHP臨時(shí)文件的安全性怎么樣”,在日常操作中,相信很多人在PHP臨時(shí)文件的安全性怎么樣問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP臨時(shí)文件的安全性怎么樣”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)是一家專業(yè)提供本溪企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為本溪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

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

然而,很多應(yīng)用的運(yùn)行都離不開臨時(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)槟承┰?,而刪除失敗
2.5 寫得不好的應(yīng)用程序,可能忽略或者忘記了刪除臨時(shí)文件

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

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

3.1可見性

眾所周知,將私有數(shù)據(jù)公開很有風(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 filename
define(‘TMP_DIR','/tmp/');
$prefix = ‘skiResort';
// construct the filename
$tempFilename = uniqid( $prefix, TRUE );
// create the file
touch( $tempFilename );
// restrict permissions
chmod ( $tempFilename, 0600 );
// now work with the file
// … assuming data in $value
file_put_contents( $tempFilename, $value );
// …
// when done with temporary file, delete it
unlink ( $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 $value
file_put_contents( $tempFilename, $value );
// …
// when done with temporary file, delete it
unlink ( $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,allow
deny 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è)文件,在你開始寫之前,這個(gè)文件應(yīng)該為空,如下


<?php
if ( 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']查看。

到此,關(guān)于“PHP臨時(shí)文件的安全性怎么樣”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

當(dāng)前題目:PHP臨時(shí)文件的安全性怎么樣-創(chuàng)新互聯(lián)
本文鏈接:http://aaarwkj.com/article10/ccjcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
亚洲永久免费精品一区二区三区| 国产三级视频在线观看视频| 欧洲精品亚洲精品日韩专区| 97国产精品成人免费视频| 欧美日韩精品一区二区视频永久免| 五月婷婷丁香婷婷丁香| 视频在线观看亚洲午夜福利| 粉嫩国产精品一区二区| 亚洲一区欧美二区日韩| 欧美日韩精品一区二区视频永久免| 精品久久亚洲一区二区欧美| av天天堂网在线播放| 中文字幕国产精品一二区| 日本不卡一区二区在线观看| 欧美亚洲国产日韩熟女| 三级黄色片免费久久久| 中文字幕国产精品综合一区| 99国产精品欲av麻豆在线观看| 美女在线观看av少妇| 亚欧乱色熟女一区二区三区| 久久亚洲综合色一区二区三区| 欧美一级免费黄片在线播放| 亚洲午夜激情免费试看| 亚洲综合成人av在线| 久久久亚洲精品中文字幕蜜桃| 国产高清大片一级黄色| 欧美日韩亚洲人人夜夜澡| 中文字幕熟女av一区二区| 亚洲精品色播一区二区| 精品一二三区在线天堂| 午夜美女精品福利视频| 日本一区二区三区在线观看视频| 在线观看免费国产不卡| 爱高潮www亚洲精品| av一区二区三区网站| 真人国产一级美女免费视频| 亚洲一区二区视频在线观看免费| 欧美大片免费高清观看| 久久裸体国语精品国产91| 亚洲理论电影在线观看| 麻豆看片高清在线播放|