章紅琴1,張文盛2
(1.安徽繼遠(yuǎn)軟件有限責(zé)任公司,安徽 合肥 230088;2.安徽廣播電視大學(xué),安徽 合肥 230022) 摘要:針對傳統(tǒng)URL保護(hù)算法存在暴露實(shí)現(xiàn)細(xì)節(jié)的問題,提出一種采用MD5和AES保護(hù)URL的改進(jìn)算法。首先將原始URL和密鑰key1按規(guī)定順序裝配,計(jì)算MD5檢驗(yàn)和,并將檢驗(yàn)和嵌入原始URL得到防篡改URL;其次使用密鑰key2對防篡改URL執(zhí)行AES加密得到加密URL;最后對加密URL進(jìn)行編碼,得到受保護(hù)URL。解析過程逆向操作,期間驗(yàn)證檢驗(yàn)和,丟棄無效請求。在PHP中測試兩種保護(hù)算法的性能,結(jié)果表明改進(jìn)算法與傳統(tǒng)算法相比,生成速度變?yōu)樵瓉淼?倍,解析速度變?yōu)樵瓉淼?.8倍。而相比傳統(tǒng)算法,改進(jìn)算法具有保密性特點(diǎn),能夠提高Web應(yīng)用的安全性。
關(guān)鍵詞:URL保護(hù);Web安全;信息泄露;語義攻擊
0引言
URL是Web應(yīng)用的重要組成部分,不重視URL的保護(hù)會(huì)造成不良后果。一些Web應(yīng)用將用戶名和密碼等敏感信息嵌入U(xiǎn)RL實(shí)現(xiàn)特定功能,而瀏覽器都有記錄訪問歷史功能,將用戶訪問的敏感URL記錄下來,一旦黑客有機(jī)會(huì)掃描和分析該記錄,就會(huì)造成信息泄露[1]。此外在大量的Web應(yīng)用中,數(shù)據(jù)庫使用自增id作為記錄的鍵值,并在URL的請求參數(shù)直接嵌入該鍵值,生成類似于show.php?id=9的URL,惡意用戶據(jù)此可推測出數(shù)據(jù)庫實(shí)現(xiàn)方式,偽造其他請求參數(shù),例如id=10對數(shù)據(jù)庫進(jìn)行語義攻擊,訪問到應(yīng)該受限的資源[2]。URL保護(hù)是對URL進(jìn)行適當(dāng)?shù)奶幚?,杜絕此類不良后果,提高Web安全性。
URL保護(hù)內(nèi)容包括結(jié)構(gòu)、編碼和算法等多方面,重點(diǎn)是保護(hù)算法。在設(shè)計(jì)URL保護(hù)算法時(shí),需要考慮多個(gè)因素,包括保護(hù)強(qiáng)度、解析效率和編程接口復(fù)雜度等。URL保護(hù)算法越復(fù)雜,保護(hù)強(qiáng)度也就越高,而每次訪問都需要進(jìn)行URL解析,相應(yīng)的開銷也就越大,特別對于訪問量較大的應(yīng)用,更是需要慎重設(shè)計(jì),要在幾個(gè)因素之間找到一個(gè)平衡點(diǎn)。本文遵從該設(shè)計(jì)原則,提出一種URL保護(hù)算法,在盡量降低解析開銷的同時(shí),實(shí)現(xiàn)URL的保密性和抗篡改特性。
1相關(guān)研究
目前URL保護(hù)算法研究主要采用MD5算法[35]。MD5是一種散列算法,能夠?qū)⑷我忾L的字符串計(jì)算成為一個(gè)128 bit的值,具有很強(qiáng)的抗碰撞攻擊能力[6]。這類URL保護(hù)算法的處理過程是:首先將原始URL字符串s1和一個(gè)密鑰字符串key拼接形成字符串s2;其次計(jì)算s2的MD5檢驗(yàn)和;最后將檢驗(yàn)和嵌入s1成為字符串s3,s3是供用戶訪問的最終URL。用戶訪問最終URL時(shí),系統(tǒng)完成驗(yàn)證檢驗(yàn)和的工作。其工作原理如圖1和圖2所示。
傳統(tǒng)URL保護(hù)算法的核心是密鑰key,由于MD5是不可逆算法,想要反推出密鑰key,是極其困難的。沒有圖2傳統(tǒng)URL保護(hù)算法解析URL過程
密鑰key, 想要計(jì)算出含攻擊意圖的s1且能夠通過驗(yàn)證,即碰撞攻擊,也是極其困難的。因此MD5能夠有效保護(hù)URL不被篡改,保證用戶訪問的URL都是合法的。但是這些研究未考慮明文請求參數(shù)的信息泄漏問題,還需要完善。本文提出一種URL保護(hù)算法,既能防篡改,又能保密,可以大幅提升Web應(yīng)用安全。
2改進(jìn)URL保護(hù)算法
改進(jìn)URL保護(hù)算法采用MD5和AES共同保護(hù)URL。AES是一種對稱加密算法,屬于分組密碼,具有很強(qiáng)的抗分析能力[78]。規(guī)定雙引號為字符串定界符,雙引號之間的字符為字符串內(nèi)容,“+”為字符串拼接運(yùn)算符,則改進(jìn)算法的具體執(zhí)行過程是:
?。?)將請求參數(shù)s1和密鑰key1按規(guī)定順序裝配成字符串s2=key1+s1;
?。?)計(jì)算s2的MD5檢驗(yàn)和v=md5(s2);
(3)將檢驗(yàn)和v嵌入s1成為新請求字符串s3="v="+v+"&"+s1;
?。?)對s3使用密鑰key2執(zhí)行AES加密得到字符串s4=aes(s3,key2);
?。?)對s4使用改進(jìn)base64編碼成為字符串s5=base64_encode_ex(s4),得到最終URL。
(6)解析過程逆向操作,期間驗(yàn)證檢驗(yàn)和,丟棄無效請求。
其工作原理如圖3、圖4所示。
本算法的改進(jìn)之處在于,在MD5實(shí)現(xiàn)防篡改特性基礎(chǔ)之上,使用AES加密算法加強(qiáng)信息泄露保護(hù),從而實(shí)現(xiàn)保密特性。在算法設(shè)計(jì)上,做如下幾點(diǎn)說明:
(1)雖然AES已經(jīng)可以很好地保護(hù)URL,但是為了強(qiáng)化保護(hù)能力,繼續(xù)保留key1用于MD5計(jì)算;
?。?)使用AES解密偽造的URL時(shí),可能不會(huì)出錯(cuò),但會(huì)得到亂碼字符串,對后續(xù)步驟的執(zhí)行造成干擾,為了更好地檢測這種攻擊,在將檢驗(yàn)和嵌入s3時(shí),特意增加"v="標(biāo)識,便于驗(yàn)證和丟棄無效的請求;
?。?)AES加密生成的是二進(jìn)制字符串,需要用base64編碼成為可以傳輸?shù)淖址5莃ase64編碼中存在+/字符,不是URL兼容的,本算法采用改進(jìn)base64 算法,將+/替換為_*。
(4)為了支持AJAX,允許在保護(hù)URL后面拼接其他請求參數(shù),但是不允許覆蓋保護(hù)URL中的參數(shù)。
3算法實(shí)現(xiàn)
下面給出改進(jìn)算法的PHP實(shí)現(xiàn)。改進(jìn)算法需要多個(gè)參數(shù),將其封裝成配置參數(shù)對象,結(jié)構(gòu)如下:
$cfg = new stdClass();
$cfg->key1 = 123456;//md5密鑰
$cfg->aes= aes128;//aes加密標(biāo)準(zhǔn)
$cfg->key2 = 111111;//aes密鑰
$cfg->iv = kl3j42;l4j2;lkj4;
//aes iv值,初始向量
3.1生成算法
//$s1為請求參數(shù)串,$cfg為配置參數(shù)對象
function createLink($s1, $cfg)
{
$v = md5($cfg->key1 . $s1);//生成檢驗(yàn)和
$s2 = v= . $v .& . $s1;
$s3 = openssl_encrypt($s2, $cfg->aes, $cfg->key2, true, $cfg->iv);//加密
$s4=strtr(base64_encode($s3), +/,_*);;
//使用改進(jìn)base64編碼處理
return $s4;
}
3.2解析算法
//$s5為安全URL串,$cfg為配置參數(shù)對象
function parseLink($s5, $cfg)
{
$s4 = base64_dencode(strtr($s5,_*,+/));//解碼
if($s4 === false) return false;//解碼失敗
$s3 = openssl_decrypt($s4, $cfg->aes, $cfg->key2, true, $cfg->iv);
if($s3 === false) return false;//解密失敗
$i = strpos($s3,&);
if($i === false) return false;//未找到&
$v=substr($s3, 0, $i);
//$i是長度,解析嵌入的檢驗(yàn)和
if($i <> 34 || substr($v, 0, 2) <>v=) return false;//長度或標(biāo)識不符
$v = substr($v, 2);//取檢驗(yàn)和
$s1 = substr($s3, $i + 1);//解析s1
$s2 = $cfg->key1 . $s1;
$v2 = md5($s2);//計(jì)算檢驗(yàn)和
if($v <> $v2) return false;//比較檢驗(yàn)和
return $s1;
}
4性能測試
分別測試傳統(tǒng)算法和改進(jìn)算法的性能開銷。測試環(huán)境硬件為Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz CPU,軟件為Windows 2003(x86_32,企業(yè)版) + PHP 5.3.13(nts,x86_32)。采用兩組s1輸入,每次測試3次,取平均值,測試結(jié)果如表1所示。
從表1可以看出,改進(jìn)算法生成時(shí)間比傳統(tǒng)算法生成時(shí)間增加(a2-a1)/a1=2倍左右,改成算法解析時(shí)間比傳統(tǒng)算法解析時(shí)間增加(a4-a2)/a2=0.8倍左右。此外解析時(shí)間比生成時(shí)間都要長,傳統(tǒng)算法解析時(shí)間是傳統(tǒng)算
法生成時(shí)間的(a2-a1)/a1=1.8倍左右,改進(jìn)算法解析 時(shí)間是改進(jìn)算法生成時(shí)間的(a4-a3)/a3=0.7倍左右。還可以分析出當(dāng)字符串長度從10增加到100時(shí),相應(yīng)的處理時(shí)間增加不到10%,說明字符串長度增加對算法性能的影響不是很大。
5結(jié)論
保護(hù)URL能提高Web應(yīng)用的安全性,傳統(tǒng)URL保護(hù)算法存在信息泄漏問題,為此本文設(shè)計(jì)了一種改進(jìn)URL保護(hù)算法,既能防篡改,又能防止信息泄漏,能夠全面保護(hù)URL。在給出實(shí)現(xiàn)代碼的同時(shí),測試了兩種算法的性能,結(jié)果表明改進(jìn)算法性能并沒有大幅下降,可以滿足大多數(shù)Web應(yīng)用的需求。
參考文獻(xiàn)
[1] 朱小龍,孫國梓.瀏覽器歷史痕跡提取技術(shù)[J].信息網(wǎng)絡(luò)安全,2013(1):19-21.
?。?] 熊婧.SQL注入檢測技術(shù)研究[D].武漢:華中科技大學(xué),2009.
[3] 杜恩寬.URL攻擊防范和細(xì)粒度權(quán)限管理的安全鏈接方法[J].計(jì)算機(jī)應(yīng)用,2009, 29(8):2230-2232.
?。?] 劉國卿.基于MD5 的URL 防篡改算法設(shè)計(jì)[J].科技信息,2011(3):504505,536.
?。?] 張杰,李華偉,周立軍.一種采用MD5加密算法防止URL攻擊的方法[J].現(xiàn)代計(jì)算機(jī), 2014(4):52-54.
?。?] 毛熠,陳娜.MD5算法的研究與改進(jìn)[J].計(jì)算機(jī)工程,2012,38(24):111-114,118.
[7] 趙雪梅.AES加密算法的實(shí)現(xiàn)及應(yīng)用[J].常熟理工學(xué)院學(xué)報(bào),2010,24(2):105-110.
?。?] 楊斐,彭鵬.基于AES的可重構(gòu)加密系統(tǒng)的FPGA設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2014,33(24):2-4.