国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 語言 > PHP > 正文

PHP安全之臨時(shí)文件的安全

2024-09-04 11:50:21
字體:
供稿:網(wǎng)友

(一)臨時(shí)文件簡(jiǎn)介

臨時(shí)文件,顧名思義是臨時(shí)的文件,文件的生命周期短。
然而,很多應(yīng)用的運(yùn)行都離不開臨時(shí)文件,臨時(shí)文件在我們電腦上無處不在,通常有以下幾種形式的臨時(shí)文件:

  • 文件或圖形編輯程序,所生成的中間文件
  • 數(shù)據(jù)庫查詢時(shí),生成的臨時(shí)緩存文件,提供之前的結(jié)果數(shù)據(jù)而,以減少再次訪問數(shù)據(jù)庫的代價(jià);通常用于遠(yuǎn)程數(shù)據(jù)庫或遠(yuǎn)程xml的服務(wù)
  • 文件被上傳后在服務(wù)端的臨時(shí)儲(chǔ)存,其文件名為php的全局變量$_FILES['userfile']['tmp_name']的值
  • 在http請(qǐng)求中,用于存放session的臨時(shí)文件,這些文件名通常就是sessionid(如 sess_7483ae44d51fe21353afb671d13f7199)
  • 在不同應(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í)文件通常被創(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)程)都可以向這些目錄寫入東西,有不安全的許可問題。比如我們都知道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í)文件是非持久的,在程序結(jié)束時(shí),會(huì)被刪除,但有的時(shí)候臨時(shí)文件也會(huì)被迫持久保存了,沒有被刪除,如:

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

3)風(fēng)險(xiǎn)
無用的臨時(shí)文件像幽靈一樣存在你的服務(wù)器上,一方面占用硬盤,另一方面,可以被其它人非法使用,存著如下一些風(fēng)險(xiǎn):
3.1)可見
眾所周知,將私有數(shù)據(jù)公開很有風(fēng)險(xiǎn)。一旦用戶通過某些手段(如shell或者ftp)竊取了你的臨時(shí)文件,就可以獲取到用戶或企業(yè)的私有數(shù)據(jù),從而對(duì)你造成影響。
例如:臨時(shí)文件2011_Confidential_Sales_Strategies.tmp,可能暴露你們公司2011年的商業(yè)策略,這對(duì)你的競(jìng)爭(zhēng)對(duì)手來說,將很有用處;而對(duì)于session劫持者來說,存放用戶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 就可以訪問到前一個(gè)用戶的驗(yàn)證結(jié)果了。
3.2)執(zhí)行
通常臨時(shí)文件是不可執(zhí)行,但如果攻擊者上傳了一個(gè)php腳本到你的臨時(shí)目錄,而且通過某種方式執(zhí)行了它,那可能造成悲劇了。如下:
<?php exec(‘rm /*.*’); ?>
3.3)劫持
攻擊者可能為了自己的目的,而劫持你的臨時(shí)文件。他可能替換你的臨時(shí)文件,也可能在你的臨時(shí)文件后面追加一些信息。

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

  • 讓你的應(yīng)用程序處理他的數(shù)據(jù),而不是你自己的數(shù)據(jù)
  • 暴露隱私數(shù)據(jù),比如系統(tǒng)的密碼文件,或者其它php安全模式不能正常讀的文件
  • 刪除數(shù)據(jù),阻礙請(qǐng)求的正常進(jìn)行
  • 創(chuàng)建并輸出虛假的數(shù)據(jù),破壞請(qǐng)求的結(jié)果
  • 通過提供虛假的數(shù)據(jù),對(duì)使用數(shù)據(jù)進(jìn)行下一步處理的應(yīng)用程序造成破壞
  • 將你的輸出重定向到其它地方,可以方便攻擊者訪問或者覆蓋系統(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)容一部分是新的,一部分是舊的,也就是我們常說的讀臟數(shù)據(jù)。
臨時(shí)文件的劫持,在一定程度上會(huì)造成競(jìng)爭(zhēng)條件,除非劫持者準(zhǔn)確的把握時(shí)間和位置,否則就會(huì)造成此類安全問題。

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

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í)候,用一些有意義的前綴來命名,這樣能通過文件名看出文件中包含的數(shù)據(jù)或者需要此數(shù)據(jù)的應(yīng)用,但從安全性的角度來看最好不要這樣,這樣等于為攻擊者指明了方向。

這里介紹一種方法,即能有一定意義的前綴同時(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è)腳本通過uniqid()函數(shù),生成的文件名格式為:/tmp/skiResort392942668f9b396c08.03510070,并通過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, 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)約束訪問權(quán)限
為了降低臨時(shí)文件被執(zhí)行或劫持的可能性,需要設(shè)置臨時(shí)文件和臨時(shí)文件目錄的訪問權(quán)限。通常情況下,將臨時(shí)文件的權(quán)限設(shè)置為rw——-,臨時(shí)文件目錄的權(quán)限設(shè)置為rwx——。
此外,也可以通過設(shè)置apache的配置文件來限制訪問(只有你將臨時(shí)文件放在www目錄下的時(shí)候),如下:

<Directory /var/www/myapp/tmp>
<FilesMatch “/.ph(p(3|4)?|tml)$”>
order deny,allow
deny from all
</FilesMatch>
</Directory>

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)建的有問題,也有可能劫持者在你創(chuàng)建與寫文件的這個(gè)時(shí)間段    內(nèi)作了手腳。

  • 還有可能,你第一次成功寫入了臨時(shí)文件,但在你后面的寫的過程中,劫持者對(duì)這個(gè)臨時(shí)文件進(jìn)行了一些操作,這種情況可以通過檢驗(yàn)碼的方式來檢查,如下:
<?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í)候可以先檢查文件末尾是否存在合法的證書;如果你沒有使用openssl,也可以寫入一段特定的算法生成的token,原理類似。

5)檢查上傳的文件
判斷文件是否是通過 HTTP POST 上傳的

bool is_uploaded_file ( string $filename )

如果 filename 所給出的文件是通過 HTTP POST 上傳的則返回 TRUE。這可以用來確保惡意的用戶無法欺騙腳本去訪問本不能訪問的文件,例如 /etc/passwd。 如果上傳的文件有可能會(huì)造成對(duì)用戶或本系統(tǒng)的其他用戶顯示其內(nèi)容的話,這種檢查顯得格外重要。
為了能使 is_uploaded_file() 函數(shù)正常工作,必須指定類似$_FILES['userfile']['tmp_name'] 的變量,而不是從客戶端上傳的文件名 $_FILES['userfile']['name']。需要注意的是is_uploaded_file返回false,不一定是上傳文件被劫持了,也有可能是文件太大或者上傳部分等,這些可以通過$_FILES['userfile']['error']查看。

參考文獻(xiàn):
《Apress pro.php security 2th》
http://cn.php.net/is_uploaded_file
http://www.56wlw.com/article/4906

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
伊人色综合网| 国产九九九九| 亚洲成人av在线影院| 在线免费观看污| 亚洲videos| 高潮白浆视频| 国产www视频在线观看| japanese色国产在线看视频| 国产永久av在线| 国产福利一区二区在线精品| 国产视频资源| 四虎精品成人a在线观看| 99视频在线观看地址| 伊人av免费在线观看| sese在线视频| 国产激情在线视频| 黄网站在线观看高清免费| 国产天堂在线观看| 好吊日视频在线观看| 亚洲欧美国产另类首页| 国产偷窥老熟盗摄视频| www.狠狠色.com| 91啦中文在线| 天堂资源中文在线| 青草青在线视频| 国产youjizz在线| 国产九九在线| www在线观看播放免费视频日本| 国产亚洲精品午夜高清影院 | 日本视频在线观看一区二区三区| 国产精品自产拍在线网站| 亚洲wwwwww| 在线观看免费观看在线91| 国产系列电影在线播放网址| 国产美女性感在线观看懂色av| 夜色资源网av在先锋网站观看| 国产精品区一区二| 国产一级性片| 国产精品自拍在线观看| 久久久久久五月天久久久久久久久| 亚洲社区在线| 天天草天天草| 超碰国产在线| 久久国产情侣| 看成年女人免费午夜视频| 天天操夜夜做| eeuss影院网站免费观看| av免费在线一区二区三区| 在线观看电影av| 亚洲国产日韩在线人成电影| 四虎精品视频| 国产永久免费高清在线观看| 精品资源在线看| 国产在线传媒| 国产精品入口麻豆免费看| 国产情侣高潮对白| 国产91久久久久蜜臀青青天草二| 精品国内自产拍在线视频| 伊人av免费在线观看| www狠狠操| 天天操天天操一操| 2019年中文字幕| 欧美性猛交xxxx免费看久久| 久久国产情侣| 精品美女在线观看视频在线观看| 一本久久精品| 五月天丁香在线| 色吊丝av中文字幕| 国产在线拍揄自揄拍视频| 国产偷窥洗澡视频| a视频在线观看免费| 最近中文字幕在线中文视频| 精品国产一区二区三区不卡在线| 四虎成人欧美精品在永久在线| 国产精选在线观看| 精品电影在线| 国产亚洲精品久久久久久移动网络 | 中文字幕网在线| 精品国产一区二区三区四区阿崩| 男人天堂99| 日本在线视频www鲁啊鲁| 国产精品美女一区二区视频| 免费看黄视频网站| 亚洲精品国自产拍在线观看| 国产成+人+亚洲+欧美+综合| 国产精品偷乱一区二区三区| 青青青手机在线视频观看| 精品国内自产拍在线视频| 中文字幕视频在线观看| 欧美午夜电影一区二区三区| 国产精品四虎| 尤物网在线观看| 国产综合视频一区二区三区免费| 亚洲欧美日韩综合精品网| 91在线最新| 中文天堂av| 99热国产在线| 国产成+人+亚洲+欧美+综合| 最近免费中文字幕在线第一页| 久久国产精品久久久久久小说| 亚洲人av在线| www.xxx黄| 青青草中文字幕| www.国产精| 国内自拍视频在线看免费观看| 日本成人网址| 免费黄色网页在线观看| 超碰在线中文| 最新超碰在线| 国产精品9区| 亚洲sss视频| 青青草视频在线免费观看| 亚洲男人网站| 九七电影韩国女主播在线观看| 日本成人a视频| 国产在线资源| 国产精品国产国产aⅴ| 精品一区二区三区高清免费不卡 | 黄色网址在线免费播放| 国产在线麻豆精品| 国产人成精品| 一个人看的www免费观看视频| 午夜小视频在线| 国产麻豆一区二区三区精品| 91国内精品在线视频| 午夜羞羞小视频在线观看| 国产中文字幕av| 97视频在线观看网站| 激情亚洲综合网| av超碰在线| 天天操夜夜摸| 欧洲有码在线视频| 国产欧美日韩第一页| 在线视频1区2区| 国产精品一区二区资源| 亚洲一道本在线| 国产小视频在线高清播放| 一级黄色av| 国产白浆在线| 国产精品视频一区二区三区麻豆| 国产麻豆麻豆| 噜噜噜噜噜在线视频| 2020国产在线视频| 国产乱人视频免费播放| a视频在线播放| 国产小视频在线观看| 久久国产精品黑丝| 精品a在线观看| 久久五月精品中文字幕| 精品国产一区二区三区不卡在线 | 噜噜噜噜噜在线视频| 在线中文av| 精品推荐蜜桃传媒| 国产精品免费麻豆入口| 国产美女视频一区二区二三区| 青青草在线免费观看| 午夜在线观看91| 国产成a人亚洲精v品| 最新中文字幕在线| 国产一卡2卡3卡免费网站| 国产69精品久久久久孕妇国产69久久 | 性国产高清在线观看| 国产盗摄精品一区二区酒店| 国产羞羞视频在线观看| 国产另类图片| 国产呻吟对白刺激无套视频在线| 青青九九免费视频在线| 青青青国产视频| 国产在线观看网站| 国产一级性片| 精品国产福利一区二区在线| 精品推荐国产麻豆剧传媒| 99综合精品久久| www.av在线| 国产在线看片| 国产日本在线| 永久免费在线观看| 男人天堂网在线观看| 国产乱在线观看视频| 国产特级淫片免费看| 69国产精品| 99在线视频观看| 欧美黑人乱大交| 五月综合网站| 精品伦理一区二区| 欧美亚洲天堂| 国产精品美女一区二区视频| 精精国产xxxx视频在线动漫| 四虎www视频| 国产偷窥洗澡视频| 中文在线视频| 午夜免费福利在线观看| 在线免费观看黄色av| 国产精品亚洲第五区在线| 精品一二三四| 天堂在线一二区| 99久热re在线精彩视频| 国产专区在线| 亚洲一本大道| 国产高潮又爽又无遮挡又免费|