天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

解析web文件操作常見安全漏洞(目錄、文件名檢測漏洞)

做web開發(fā),我們經(jīng)常會(huì)做代碼走查,很多時(shí)候,我們都會(huì)抽查一些核心功能,或者常會(huì)出現(xiàn)漏洞的邏輯。隨著技術(shù)團(tuán)隊(duì)的壯大,組員技術(shù)日益成熟。 常見傻瓜型SQL注入漏洞、以及XSS漏洞。會(huì)越來越少,但是我們也會(huì)發(fā)現(xiàn)一些新興的隱蔽性漏洞偶爾會(huì)出現(xiàn)。這些漏洞更多來自開發(fā)人員,對一個(gè)函數(shù)、常見模塊功能設(shè)計(jì)不足,遺留下的問題。以前我們能夠完成一些功能模塊,現(xiàn)在要求是要安全正確方法完成模塊才行。 接下來,我會(huì)分享一些常見功能模塊,由于設(shè)計(jì)原因?qū)е侣┒闯霈F(xiàn)。下面,我們先看下,讀取文件型功能漏洞。
我們先看下下面一段代碼,通過用戶輸入不同目錄,包含不同文件
復(fù)制代碼 代碼如下:
<?php
///讀取模塊名稱
$mod = isset($_GET['m'])?trim($_GET['m']):'index';
///過濾目錄名稱不讓跳轉(zhuǎn)到上級(jí)目錄
$mod = str_replace("..",".",$mod);
///得到文件
$file = "/home/www/blog/".$mod.".php";
///包含文件
@include($file);

這段代碼,可能在很多朋友做的程序里面有遇到過,對于新人來說,也是很容易出現(xiàn)這樣問題,記得走查遇到該代碼時(shí)候,我問到,你這個(gè)代碼安全方面能做到那些?
答:1. 對”..”目錄有做替換,因此用戶傳入模塊名里面有有..目錄都會(huì)被替換掉了。
    2.構(gòu)造拼接file名稱,有前面目錄限制,有后面擴(kuò)展名限制,包含文件就會(huì)限制在該目錄了
這段代碼真的做到了目錄安全檢測嗎?
我們來測試下,如果$mod傳入這個(gè)值將會(huì)是什么樣的結(jié)果。image

$mod 通過構(gòu)造輸?mod=…%2F…%2F…%2F…%2Fetc%2Fpasswd%00 ,我們看結(jié)果將是:

image

居然include(“/etc/passwd”)文件了。
怎么逃脫了我參數(shù)限制呢?
首先:
做參數(shù)過濾類型去限制用戶輸入本來就不是一個(gè)好方法,一般規(guī)則是:能夠做檢測的,不要做替換 只要是檢測不通過的,直接pass 掉!這是我們的一個(gè)原則。過濾失敗情況,舉不勝舉,我們來看看,實(shí)際過程。
1、輸入”…/…/…/” 通過把”..” 替換為”.”后
2、結(jié)果是”../../../” 就變成了這個(gè)了
有朋友就會(huì)說,如果我直接替換為空格是不是就好了?在這個(gè)里面確實(shí)可以替換掉。但是不代表以后你都替換為空格就好了。再舉例子下。如:有人將字符串里面Javascript替換掉。代碼如下:
復(fù)制代碼 代碼如下:
……
$msg = str_replace(“Javascript”,””,$msg);

看似不會(huì)出現(xiàn)了Javascript了,但是,如果輸入:jJavascriptavascript 替換,會(huì)替換掉中間一個(gè)變?yōu)榭蘸蟆G懊娴摹眏” 跟后面的會(huì)組成一個(gè)新的Javascript了。

其次:我們看看,怎么逃脫了,后面的.php 限制呢。用戶輸入的參數(shù)有:”etc/passwd/0” ,/0字符非常特殊,一段連接后,文件名稱變成了”……etc/passwd/0.php”,你打印出該變量時(shí)候,還是正確的。但是,一段放入到文件讀寫操作方法里面,/0后面會(huì)自動(dòng)截?cái)唷2僮飨到y(tǒng),只會(huì)讀取……etc/passwd文件了。 “/0”會(huì)出現(xiàn)在所有文件系統(tǒng)讀寫文件變量中。都會(huì)同樣處理。這根c語言/0作為字符串完整標(biāo)記有關(guān)系。
通過上面分析,大家發(fā)現(xiàn)做文件類型操作時(shí)候,一不注意將產(chǎn)生大的漏洞。而且該漏洞就可能引發(fā)一系列安全問題。

該怎么做文件類操作呢?
到這里,估計(jì)有人就會(huì)思考這個(gè),做文件讀寫操作時(shí)候,如果路徑里面有變量時(shí)候,我該怎么樣做呢?有人會(huì)說,替換可以嗎? “可以”,但是這個(gè)方法替換不嚴(yán)格,將會(huì)出現(xiàn)很多問題。而且,對于初寫朋友,也很難杜絕。 做正確的事情,選擇了正確的方法,會(huì)從本身杜絕問題出現(xiàn)可能了。 這里,我建議:對于變量做白名單限制。

1.什么是白名單限制
復(fù)制代碼 代碼如下:
舉例來說:
$mod = isset($_GET['m'])?trim($_GET['m']):'index'; ///讀取模塊名稱后
mod變量值范圍如果是枚舉類型那么:
if(!in_array($mod,array(‘user','index','add','edit'))) exit(‘err!!!');
完全限定了$mod,只能在這個(gè)數(shù)組中,夠狠!!!!

2.怎么做白名單限制
通過剛才例子,我們知道如果是枚舉類型,直接將值放到list中即可,但是,有些時(shí)候,這樣不夠方面。我們還有另外一個(gè)白名單限制方法。就是限制字符范圍
復(fù)制代碼 代碼如下:
舉例來說:
$mod = isset($_GET['m'])?trim($_GET['m']):'index'; ///讀取模塊名稱后
我限制知道$mod是個(gè)目錄名稱,對于一般站點(diǎn)來說,就是字母加數(shù)字下劃線之類。
if(!preg_match(“/^/w+$/”,$mod)) exit(‘err!!!');
字符只能是:[A-Za-z0-9_] 這些了。夠狠!!!

總結(jié):是不是發(fā)現(xiàn),白名單限制方法,做起來其實(shí)很簡單,你知道那個(gè)地方要什么,就對輸入檢測必須是那些。而且,檢測自己已知的,比替換那些未知的字符,是不是簡單多了。 好了,先到這里,正確的解決問題方法,會(huì)讓文件簡單,而且更安全!!

php技術(shù)解析web文件操作常見安全漏洞(目錄、文件名檢測漏洞),轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 亲胸摸下面激烈免费网站 | 97精品伊人久久大香线蕉app | 91精品专区 | 一个人免费视频在线观看 | 国产精品久久久久久久久久免费 | 女人把腿张开叫男人桶免费视频 | 免费毛片网站在线观看 | 野花韩国高清完整版在线 | 精品久久久久久久99热 | 久久棋牌评测 | 日韩一级精品久久久久 | 樱桃视频影院在线播放 | 午夜理论电影在线观看亚洲 | 免费精品国偷自产在线在线 | 全黄H全肉禁乱公 | 亚洲国产日韩欧美在线a乱码 | 野花日本大全免费高清完整版 | Y8848高清私人影院软件优势 | 国产午夜精品理论片免费观看 | 午夜性伦鲁啊鲁免费视频 | 国产精品久久久久久人妻精品蜜桃 | 久久深夜视频 | 亚洲大片在线观看 | 久欠热视频精品首页 | 三级貂蝉艳史 在线观看 | 国产午夜精品久久久久婷婷 | 乳巨揉みま痴汉电车中文字幕动漫 | 国产精品爆乳尤物99精品 | 午夜神器18以下不能进免费 | 最近中文字幕在线看免费完整版 | 美国特级成人毛片 | 我要女人的全黄录像 | 国产成人啪精视频精东传媒网站 | 国产精品禁18久久久夂久 | 伊人久久大香线蕉综合网站 | 樱桃视频影院在线播放 | 亚洲免费va在线观看 | 成人区精品一区二区不卡AV免费 | 成人无码在线超碰视频 | 亚洲国产货青视觉盛宴 | 免费一区二区三区久久 |