• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      防范隱藏在文件上傳中的威脅

      2019-12-24 23:21:47河南許紅軍
      網(wǎng)絡(luò)安全和信息化 2019年6期
      關(guān)鍵詞:腳本黑客語句

      ■ 河南 許紅軍

      編者按: 對(duì)于很多網(wǎng)站來說,都提供了文件上傳功能,允許用戶上傳圖片等文件,實(shí)現(xiàn)和其他人的互動(dòng)。但是,這一功能也成了黑客等不法之徒覬覦的目標(biāo)。黑客往往利用目標(biāo)網(wǎng)站存在的各種漏洞來上傳各種非法文件,進(jìn)而對(duì)網(wǎng)站進(jìn)行滲透攻擊。在很多實(shí)際的案例中,都可以看到正是因?yàn)榇嬖谏蟼髀┒?,黑客才可以很輕松的發(fā)起攻擊,因此,對(duì)文件上傳進(jìn)行嚴(yán)格的管控,對(duì)于提高網(wǎng)站的安全性是極為重要的。

      和文件上傳相關(guān)的安全威脅

      和文件上傳相關(guān)的安全威脅包括以下類型,例如針對(duì)文件上傳的DoS攻擊,就是利用文件上傳功能,上傳大量的文件,來極大的占用服務(wù)器

      的存儲(chǔ)和帶寬資源。黑客還會(huì)利用特殊方法,將非法文件(例如腳本等)傳輸上去,之后在服務(wù)器上運(yùn)行惡意腳本。當(dāng)然,黑客還可以將惡意文件上傳到服務(wù)器上,之后通過各種方法誘導(dǎo)用戶下載,當(dāng)用戶下載后,黑客就可以利用跨站腳本攻擊等方法,來對(duì)網(wǎng)站進(jìn)行滲透。

      防御惡意上傳行為

      對(duì)于第一種攻擊類型來說,黑客會(huì)使用Web應(yīng)用的上傳功能,連續(xù)發(fā)送體積巨大的文件,這就會(huì)導(dǎo)致目標(biāo)網(wǎng)站負(fù)荷過載,從而形成拒絕服務(wù)。

      應(yīng)對(duì)這種攻擊方式,可以采用各種方式加以化解。例如對(duì)于PHP類型的網(wǎng)站來說,可以在“php.ini”文件中設(shè)置允許上傳的最大容量,執(zhí)行“vim /etc/php.ini” 命令,在其中的“file_uploads=”的值設(shè)置為“Off”,就會(huì)取消上傳功能。

      在“u p l o a d_m a x_filesize =”欄中設(shè)置單個(gè)文件的最大上傳容量(例如“100K”), 在“max_file_uploads =”欄中設(shè)置單次請(qǐng)求最大文件上傳數(shù)量,在“post_max_size =”欄中設(shè)置POST請(qǐng)求正文的最大限制,一般來說上傳文件使用的都是POST方法來實(shí)現(xiàn)的。在“memory_limit =”欄 中設(shè)置腳本所能申請(qǐng)到的最大內(nèi)存值。

      當(dāng) 然,利 用Apache的“httpd.conf”文件,也可以限制請(qǐng)求正文的最大字節(jié)數(shù),通過前期的檢查可以將不合法的請(qǐng)求拒絕掉,繼而可以有效提高防御DoS的能力。

      執(zhí)行“vim /etc/httpd/conf/https.conf” 命 令,在 對(duì) 應(yīng) 的“” 欄中取消“LimitRequestBody 102400”行前面的“#”號(hào),將該行配置激活,其中的“xxx”為具體的Web路徑。執(zhí)行“systemcrl restart httpd”命令,重啟Apache。

      這樣,在執(zhí)行上傳操作時(shí),文件大量就不能超過預(yù)設(shè)值(默認(rèn)為100KB)。

      嚴(yán)格審核上傳的文件

      對(duì)于非法上傳惡意腳本來說,其正是利用了服務(wù)器端配置上的某些漏洞來實(shí)現(xiàn)的。

      因?yàn)閷?duì)于有些文件上傳的處理方式來說,會(huì)將用戶上傳的文件保存到Web服務(wù)器的公開目錄中。如果應(yīng)用中允許上傳的文件擴(kuò)展名為php、asp、aspx、jsp等腳本文件,黑客就可以將上傳的文件作為腳本在服務(wù)器上運(yùn)行。

      這樣,黑客就可以執(zhí)行瀏覽,修改和刪除Web服務(wù)器上的文件,甚至以此為跳板來攻擊其他的服務(wù)器。

      應(yīng)對(duì)的方法是禁止將上傳的文件保存到公開的目錄中,防止用戶直接查看到具體的訪問鏈接,而應(yīng)該將其保存到比較隱藏的目錄中,當(dāng)上傳之后,禁止顯示具體的鏈接地址,即必須通過特定的腳本才可以訪問上傳的文件,總之禁止在服務(wù)器上直接執(zhí)行上傳的文件。

      還可以將文件的擴(kuò)展名設(shè)置為不可執(zhí)行的腳本文件,即禁止上傳腳本類型的文件,當(dāng)然這只是輔助性質(zhì)的,因?yàn)橄拗莆募U(kuò)展名是很可能存在疏漏的。

      最關(guān)鍵的是不能將上傳文件保存在公開目錄中,因?yàn)樵诠_目錄中是可以執(zhí)行腳本的。

      例如在設(shè)計(jì)網(wǎng)站程序時(shí),需要針對(duì)上傳的文件進(jìn)行嚴(yán)格的檢測(cè)。例如在PHP網(wǎng)站中,可以定義一個(gè)名為專門的函數(shù)對(duì)此進(jìn)行檢測(cè),例如輸入諸如“define('UPLOADPATH', '/var/upload')”之類的語句,定義上傳路徑,注意其不能為公開目錄。

      輸入:

      “function check_upfile($scfile) {”

      “$i n f o=p a t h i n f o($scfile);”

      “?$ext= strtolower($info['extension'])”

      “if ($exe != 'png'&&$exe != 'jpg' &&$exe !='bmp' ) {”

      “die ('只能上傳指定格式的圖片文件!');”

      “}”

      “$count=0;”

      “do {”

      “$file=sprintf('%s/%08x.%s',UPLOADPATH,mt_rand(),$ext);”

      “$fp-@fopen === FALSE&& ++$count < 10);”

      “if ($fp === FALSE) {”

      “die('無法生成文件!');”

      “}”

      “fclose($fp);”

      “return $file;”,“}”等語句,創(chuàng)建所需的函數(shù)來檢測(cè)上傳的文件。這里的“$scfile”代表上傳的文件,首先分析和提取上傳文件的路徑信息,并獲取其規(guī)格化的擴(kuò)展名,如果擴(kuò)展名不符合要求(這里只能為圖片文件),則彈出警告信息。

      之后通過一個(gè)循環(huán),在指定的上傳路徑下創(chuàng)建名稱為隨機(jī)的文件,如果其可以順利打開的話,則說明創(chuàng)建成功,之后返回該文件名,該文件名中包含了絕對(duì)路徑信息。

      之后執(zhí)行:

      “$scfile= check_upfile($realfile)”

      “if(! move_uploaded_file($tmpfile,$scfile)){”

      “die('文件不能上傳!');”

      “}”等語句,將上傳的而原始文件寫入到上述文件中,“realfile”表示原始文件名。

      這樣,就將其存儲(chǔ)到了非公開的路徑中。當(dāng)用戶需要查看上傳的文件時(shí),不能讓其直接獲取到實(shí)際的路徑,而必須通過特定的腳本來讀取,并將讀取的信息返回給用戶。

      例 如 輸 入“$imgurl='g i v e t o u s e r f i l e.php?file=',basename($scfile);”語句,調(diào)用專用的腳本來讀取上傳的文件,并獲取對(duì)應(yīng)的文件路徑信息。

      其 中“givetouserfile.php”腳本就是用來獲取上傳文件信息的。

      其內(nèi)容為:

      “define('UPLOADPATH','/var/upload');”

      “$mimes=array('jpg'=>'image/jpeg','png'=>'image/png','bmp'=>'image/bmp');”

      “$f i l e=$_G E T['file'];”

      “$i n f o=p a t h i n f o($file);”

      “$ext=strtolower($info['extension']);”

      “$c o n t e n t_type=$mimes[$ext];”

      “if (! $content_type){”

      “die('上傳格式錯(cuò)誤!');}”

      “header('Content-Type: '. $content_type);”

      “readfile(UPLOADPATH. '/ .basename($file));”

      “?>”等行,其作用是將傳遞的文件名進(jìn)行分析,來提取其擴(kuò)展名,并找到擴(kuò)展名對(duì)應(yīng)的鍵值,如果找到的話,說明文件類型合規(guī),然后就讀取其內(nèi)容,并將其寫入到HTTP數(shù)據(jù)包中返回給用戶。

      并 通 過“"> 上傳的文件”語句,來顯示上傳文件鏈接,當(dāng)點(diǎn)擊該連接時(shí),就會(huì)顯示上傳的圖片文件。

      但是,用戶無法了解其實(shí)際的路徑。這樣就從限制文件格式,存儲(chǔ)到非公開目錄,不顯示具體鏈接等方面保證了上傳文件的安全。即使用戶上傳了非法文件,也是無法訪問和執(zhí)行的。

      當(dāng)然,這里只是使用了簡單的代碼進(jìn)行示例性的說明。

      多重檢測(cè)防止跨站腳本攻擊

      對(duì)于黑客來說,為了實(shí)現(xiàn)對(duì)客戶機(jī)進(jìn)行攻擊,往往會(huì)采取上傳包含有惡意代碼的圖片或者PDF文檔等方式,來誘使用戶進(jìn)行下載,當(dāng)用戶下載了看似正常的文件后,在進(jìn)行瀏覽時(shí)就會(huì)激活其中隱藏的惡意代碼,從而可對(duì)Web服務(wù)器造成安全威脅。

      對(duì)于這種狡猾的“迂回”攻擊策略,需要引起管理員的重視。

      例如如果網(wǎng)站存在會(huì)話管理或者認(rèn)證機(jī)制的話,當(dāng)黑客實(shí)現(xiàn)了攻擊后,網(wǎng)站的SessionID和Cookie信息就會(huì)泄露出去,黑客就可借此進(jìn)行認(rèn)證,從而偽裝用戶身份進(jìn)行非法操作。

      當(dāng)因?yàn)樵谟脩粝螺d某些文件時(shí),瀏覽器有時(shí)并不能正確識(shí)別文件的類型,例如黑客會(huì)上傳數(shù)據(jù)中包含HTML標(biāo)簽的圖片文件,導(dǎo)致瀏覽器誤認(rèn)為其是HTML文件,當(dāng)在瀏覽器中進(jìn)行查看時(shí)就會(huì)觸發(fā)其中的惡意JavaScript代碼。

      為了防止這種攻擊行為,需要正確設(shè)置文件的Content-Type類型信息,這一點(diǎn)非常重要。對(duì)上傳的文件進(jìn)行檢測(cè),保證文件擴(kuò)展名和內(nèi)容保持一致。

      例如對(duì)于JPG文件來說,必須確保其擴(kuò)展名和文件頭信息匹配。為了避免在瀏覽器中直接執(zhí)行文件,而僅僅是下載操作的話,需要在響應(yīng)頭中指定“Content-Disposition:attachment”參數(shù)信息。

      運(yùn)行“regedit.exe”程序,在注冊(cè)表編輯器中打開“HKEY_CLASSES_ROOTMIMEDatabaseContent Type”分支,在其中顯示IE可以處理的所有Content-Type類型,例如對(duì)于擴(kuò)展名為“.pdf”的文件來說,其Content-Type的 類 型 為“application/pdf”。

      當(dāng)IE接收到非圖片類型的文件時(shí),就會(huì)在注冊(cè)表的上述位置查找與其對(duì)應(yīng)的Content-Type信息,如果服務(wù)器端發(fā)送的Content-Type信息在本地找不到的話,IE就會(huì)根據(jù)具體URL地址中的擴(kuò)展名進(jìn)行判斷。而如果攻擊者在構(gòu)建URL地址時(shí)惡意添加了某些特定的信息,最終IE就會(huì)根據(jù)這些信息認(rèn)為是一個(gè)HTML文件而加以執(zhí)行。

      例如黑客會(huì)在特制的PDF文件中嵌入JavaScript代碼,之后利用網(wǎng)站設(shè)計(jì)上的漏洞(例如程序員使用了過時(shí)的Content-Type類型等),并以此構(gòu)建惡意的訪問鏈接,導(dǎo)致用戶訪問該鏈接而進(jìn)行跨站攻擊。

      對(duì)于此類安全威脅,可以在上傳和下載兩個(gè)環(huán)節(jié)進(jìn)行管控。

      對(duì)于上傳來說,需要檢測(cè)文件擴(kuò)展名是否在允許的范圍內(nèi),對(duì)于圖片文件需要確認(rèn)其文件頭信息。

      例如對(duì)于PHP來說,可以定義一個(gè)函數(shù)來進(jìn)行執(zhí)行檢測(cè)。

      例如輸入:

      “ function checktype($imgfile,$scfile){”

      “$i n f o=p a t h i n f o($scfile);”

      “$ext=strtolower($inf o['extension']);”

      “if ($ext != 'png' &&$ext != 'jpg' && $ext !='gid'){”

      “die('上傳的文件是非法的!')”

      “$imginfo=getimagesiz e($imgfile);”

      “$type=$imginfo[2];”

      “if ($ext=='gif' &&$type==IMAGETYPE_GIF)return;”

      “if ($ext=='jpg' &&$type==IMAGETYPE_JPEG)return;”

      “if ($ext=='png' &&$type==IMAGETYPE_PNG)return;”

      “die('圖片格式存在問題!')}”等語句。利用這些程序,可以對(duì)指定的文件進(jìn)行檢測(cè)。如果其格式和類型存在問題,就顯示警告信息。

      之后使用:

      “c h e c k_i m a g e_t y o p e($t m p f i l e,$realfile);”

      “$s c f i l e=c h e c k_upfile($realfile)”

      “$scfile= check_upfile ($realfile)”

      “if(! move_uploaded_file($tmpfile,$scfile)){”,“die(' 文 件 不 能 上傳!');}”等語句,來調(diào)用該函數(shù),執(zhí)行檢測(cè)上傳的圖片類型,文件格式以及存儲(chǔ)到非公開目錄等操作。

      在下載文件時(shí),需要正確設(shè)置Content-Type類型信息,針對(duì)圖片文件需要檢測(cè)文件頭,在有些時(shí)候,需要在響應(yīng)頭中指定“Content-Disposition:attachment”參數(shù)信息。

      如果在下載的時(shí)候,沒有經(jīng)過預(yù)設(shè)的腳本進(jìn)行處理,就直接可以在Web服務(wù)器上的公開目錄上出現(xiàn)的話,就說明服務(wù)器端配置存在一定的的問題。

      例如對(duì)于Apache來說,和Content-Type信息相關(guān)的設(shè)置保存在名為“mime.types”的文件之中,需要對(duì)其進(jìn)行檢測(cè),來查看是否存在錯(cuò)誤的Content-Type信息。

      因?yàn)锳pache是基于文件擴(kuò)展名,來產(chǎn)生相應(yīng)的Content-Type信息的。在下載圖片文件時(shí),依然需要對(duì)其文件頭進(jìn)行校驗(yàn),可以有效提高安全性。

      為了避免在瀏覽器中直接執(zhí)行文件,而僅僅將其下載到本地,可以在響應(yīng)消息頭中執(zhí)行“Content-Disposition:attachment”,或者將Content-Type設(shè) 置 為“application/octetstream”,就可以實(shí)現(xiàn)單純的下載操作。

      例如對(duì)于PDF來說,可在網(wǎng)站程序中使用上述“givetouserfile.php” 腳本,所不同的是在其中將的“$mimes=array”行內(nèi)容修改 為“$mimes=array('pdf'=>'application/octetstream')”。

      并且在尾部添加:

      “header('Content-Disposition: attachment;filename="'.basename($file).'" ');”

      “readfile($path)”等語句,來設(shè)置只用于下載的文件信息。

      這樣當(dāng)瀏覽器處理時(shí)就直接進(jìn)行下載了。

      猜你喜歡
      腳本黑客語句
      酒駕
      歡樂英雄
      多少個(gè)屁能把布克崩起來?
      安奇奇與小cool 龍(第二回)
      重點(diǎn):語句銜接
      網(wǎng)絡(luò)黑客比核武器更可怕
      數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
      精彩語句
      快樂假期
      如何搞定語句銜接題
      高雄市| 元江| 襄城县| 治多县| 舟山市| 哈尔滨市| 壤塘县| 霸州市| 新疆| 静海县| 项城市| 巴楚县| 阿拉善左旗| 青铜峡市| 建平县| 光泽县| 开江县| 永德县| 东城区| 包头市| 永丰县| 和平县| 新丰县| 兴业县| 珠海市| 汶上县| 长葛市| 商城县| 天峨县| 全州县| 神农架林区| 新丰县| 阜新| 伊宁县| 平果县| 库伦旗| 获嘉县| 金门县| 朝阳区| 屯昌县| 正镶白旗|