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