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