章紅琴,張文盛
(1.安徽繼遠(yuǎn)軟件有限責(zé)任公司,安徽 合肥 230088;2.安徽廣播電視大學(xué),安徽 合肥 230022)
一種改進(jìn)URL保護(hù)算法研究
章紅琴1,張文盛2
(1.安徽繼遠(yuǎn)軟件有限責(zé)任公司,安徽 合肥 230088;2.安徽廣播電視大學(xué),安徽 合肥 230022)
針對(duì)傳統(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對(duì)防篡改URL執(zhí)行AES加密得到加密URL;最后對(duì)加密URL進(jìn)行編碼,得到受保護(hù)URL。解析過程逆向操作,期間驗(yàn)證檢驗(yàn)和,丟棄無效請(qǐng)求。在PHP中測試兩種保護(hù)算法的性能,結(jié)果表明改進(jìn)算法與傳統(tǒng)算法相比,生成速度變?yōu)樵瓉淼?倍,解析速度變?yōu)樵瓉淼?.8倍。而相比傳統(tǒng)算法,改進(jìn)算法具有保密性特點(diǎn),能夠提高Web應(yīng)用的安全性。
URL保護(hù);Web安全;信息泄露;語義攻擊
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的請(qǐng)求參數(shù)直接嵌入該鍵值,生成類似于show.php?id=9的URL,惡意用戶據(jù)此可推測出數(shù)據(jù)庫實(shí)現(xiàn)方式,偽造其他請(qǐng)求參數(shù),例如id=10對(duì)數(shù)據(jù)庫進(jì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)度也就越高,而每次訪問都需要進(jìn)行URL解析,相應(yīng)的開銷也就越大,特別對(duì)于訪問量較大的應(yīng)用,更是需要慎重設(shè)計(jì),要在幾個(gè)因素之間找到一個(gè)平衡點(diǎn)。本文遵從該設(shè)計(jì)原則,提出一種URL保護(hù)算法,在盡量降低解析開銷的同時(shí),實(shí)現(xiàn)URL的保密性和抗篡改特性。
目前URL保護(hù)算法研究主要采用MD5算法[3-5]。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所示。
圖1 傳統(tǒng)URL保護(hù)算法生成URL過程
圖2 傳統(tǒng)URL保護(hù)算法解析URL過程
傳統(tǒng)URL保護(hù)算法的核心是密鑰key,由于MD5是不可逆算法,想要反推出密鑰key,是極其困難的。沒有密鑰key, 想要計(jì)算出含攻擊意圖的s1且能夠通過驗(yàn)證,即碰撞攻擊,也是極其困難的。因此MD5能夠有效保護(hù)URL不被篡改,保證用戶訪問的URL都是合法的。但是這些研究未考慮明文請(qǐng)求參數(shù)的信息泄漏問題,還需要完善。本文提出一種URL保護(hù)算法,既能防篡改,又能保密,可以大幅提升Web應(yīng)用安全。
改進(jìn)URL保護(hù)算法采用MD5和AES共同保護(hù)URL。AES是一種對(duì)稱加密算法,屬于分組密碼,具有很強(qiáng)的抗分析能力[7-8]。規(guī)定雙引號(hào)為字符串定界符,雙引號(hào)之間的字符為字符串內(nèi)容,“+”為字符串拼接運(yùn)算符,則改進(jìn)算法的具體執(zhí)行過程是:
(1)將請(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;
(4)對(duì)s3使用密鑰key2執(zhí)行AES加密得到字符串s4=aes(s3,key2);
(5)對(duì)s4使用改進(jìn)base64編碼成為字符串s5=base64_encode_ex(s4),得到最終URL。
(6)解析過程逆向操作,期間驗(yàn)證檢驗(yàn)和,丟棄無效請(qǐng)求。
其工作原理如圖3、圖4所示。
圖4 改進(jìn)URL算法解析URL過程
本算法的改進(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ì)算;
(2)使用AES解密偽造的URL時(shí),可能不會(huì)出錯(cuò),但會(huì)得到亂碼字符串,對(duì)后續(xù)步驟的執(zhí)行造成干擾,為了更好地檢測這種攻擊,在將檢驗(yàn)和嵌入s3時(shí),特意增加"v="標(biāo)識(shí),便于驗(yàn)證和丟棄無效的請(qǐng)求;
(3)AES加密生成的是二進(jìn)制字符串,需要用base64編碼成為可以傳輸?shù)淖址5莃ase64編碼中存在+/字符,不是URL兼容的,本算法采用改進(jìn)base64 算法,將+/替換為_*。
(4)為了支持AJAX,允許在保護(hù)URL后面拼接其他請(qǐng)求參數(shù),但是不允許覆蓋保護(hù)URL中的參數(shù)。
下面給出改進(jìn)算法的PHP實(shí)現(xiàn)。改進(jìn)算法需要多個(gè)參數(shù),將其封裝成配置參數(shù)對(duì)象,結(jié)構(gòu)如下:
$cfg = new stdClass();
//md5密鑰
//aes加密標(biāo)準(zhǔn)
//aes密鑰
//aes iv值,初始向量
3.1 生成算法
//$s1為請(qǐng)求參數(shù)串,$cfg為配置參數(shù)對(duì)象
function createLink($s1, $cfg)
{
$v = md5($cfg->key1 . $s1);
//生成檢驗(yàn)和
$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;
//解密失敗
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)識(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;
}
分別測試傳統(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)算
表1 URL保護(hù)算法性能測試和對(duì)比(單位:s)
法生成時(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%,說明字符串長度增加對(duì)算法性能的影響不是很大。
保護(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)用的需求。
[1] 朱小龍,孫國梓.瀏覽器歷史痕跡提取技術(shù)[J].信息網(wǎng)絡(luò)安全,2013(1):19-21.
[2] 熊婧.SQL注入檢測技術(shù)研究[D].武漢:華中科技大學(xué),2009.
[3] 杜恩寬.URL攻擊防范和細(xì)粒度權(quán)限管理的安全鏈接方法[J].計(jì)算機(jī)應(yīng)用,2009, 29(8):2230-2232.
[4] 劉國卿.基于MD5 的URL 防篡改算法設(shè)計(jì)[J].科技信息,2011(3):504-505,536.
[5] 張杰,李華偉,周立軍.一種采用MD5加密算法防止URL攻擊的方法[J].現(xiàn)代計(jì)算機(jī), 2014(4):52-54.
[6] 毛熠,陳娜.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.
[8] 楊斐,彭鵬.基于AES的可重構(gòu)加密系統(tǒng)的FPGA設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2014,33(24):2-4.
Study on an improved URL protection algorithm
Zhang Hongqin1,Zhang Wensheng2
(1. Anhui Jiyuan Software Limited Liability Company,Hefei 230088,China; 2.Anhui Radio & TV University,Hefei 230022,China)
Aiming at the problem that the traditional URL protection algorithm exposes implement details, an improved algorithm using MD5 and AES to protect URL is proposed. Firstly,the original URL and a key are orderly assembled into a string, MD5 checksum of this string is calculated,then the checksum and the original URL are assembled into a tamper proof URL. Secondly, using AES encryption algorithm,this tamper proof URL is encrypted into a cipher string. Finally, this cipher string is encoded to a protected URL.Parsing protected URL is a reverse operation,in which checksum is verified and invalid requests are discarded. The performance of these two algorithms are tested in PHP. The results show that comaring the improved algorithm with the traditional algorithm,generating speed reduces to only 2 times or so, and parsing speed reduces to only 0.8 times or so. Compared with the traditional algorithm, the improved algorithm has the feature of secrecy, which can improve the security of Web application.
URL protection;Web security;information leakage;semantic attack
TP309.7
A
1674-7720(2016)04-0009-03
章紅琴,張文盛.一種改進(jìn)URL保護(hù)算法研究[J] .微型機(jī)與應(yīng)用,2016,35(4):9-11,16.
2015-09-23)
章紅琴(1982-),女,碩士,助理工程師,主要研究方向:項(xiàng)目管理。