1.一種基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,包括以下步驟:
步驟一、構建數(shù)據(jù)庫字段替換規(guī)則集合和網(wǎng)站程序SQL關鍵字替換規(guī)則集合,所述數(shù)據(jù)庫字段替換規(guī)則集合中包括有SQL關鍵字和每一個SQL關鍵字所對應的替換字符串,所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合中包括有SQL關鍵字和每一個SQL關鍵字所對應的替換字符串;
步驟二、進行初始化替換操作,將數(shù)據(jù)庫中出現(xiàn)的與SQL關鍵字形式相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,將Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換成對應的替換字符串;
步驟三、截獲并解析Web服務器發(fā)往數(shù)據(jù)庫的SQL語句,首先把SQL語句中出現(xiàn)的與SQL關鍵字形式相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,接著把SQL語句中按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換后出現(xiàn)的替換字符串再次按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合還原為對應的SQL關鍵字,然后將所述SQL語句發(fā)往數(shù)據(jù)庫;
步驟四、截獲并解析數(shù)據(jù)庫向Web服務器的返回結果,將返回結果中出現(xiàn)的與數(shù)據(jù)庫字段替換規(guī)則集合中的替換字符串相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合進行還原,然后將返回結果發(fā)往Web服務器;
步驟五、動態(tài)變換所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合,并根據(jù)變換后的網(wǎng)站程序SQL關鍵字替換規(guī)則集合對Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字進行更新替換操作。
2.根據(jù)權利要求1所述的基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,其中步驟一具體包括以下步驟:
(1-1)、根據(jù)用戶配置信息生成SQL關鍵字集合;
(1-2)、為SQL關鍵字集合中的每一個SQL關鍵字生成對應的一個第一替換字符串,由所述SQL關鍵字、第一替換字符串以及SQL關鍵字與第一替換字符串的對應關系構成所述數(shù)據(jù)庫字段替換規(guī)則集合;
(1-3)、為SQL關鍵字集合中的每一個SQL關鍵字生成對應的一個第二替換字符串,由所述SQL關鍵字、第二替換字符串以及SQL關鍵字與第二替換字符串的對應關系構成所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合。
3.根據(jù)權利要求2所述的基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,所述數(shù)據(jù)庫字段替換規(guī)則集合中的SQL關鍵字和第一替換字符串具有一一對應關系,每一個SQL關鍵字所對應的第一替換字符串為沒有具體含義的、不常見的字符串,且所述第一替換字符串中不含有與SQL關鍵字形式相同的字符串;所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合中的SQL關鍵字和第二替換字符串具有一一對應關系,每一個SQL關鍵字所對應的第二替換字符串為沒有具體含義的、不常見的字符串,且所述第二替換字符串中不含有與SQL關鍵字形式相同的字符串;所述數(shù)據(jù)庫字段替換規(guī)則集合和所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合之間不含有相同的替換字符串。
4.根據(jù)權利要求1所述的基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,其中所述步驟三具體包括以下步驟:
(3-1)、截獲并解析Web服務器發(fā)往數(shù)據(jù)庫的SQL語句,通過將所述SQL語句與數(shù)據(jù)庫字段替換規(guī)則集合進行對比,判定所述SQL語句中是否含有與數(shù)據(jù)庫字段替換規(guī)則集合中的SQL關鍵字形式相同的字符串,若是則將所述字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,若否則不進行替換操作;
(3-2)、將所述SQL語句中按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換后出現(xiàn)的替換字符串再次按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合還原為對應的SQL關鍵字,然后將所述SQL語句發(fā)往數(shù)據(jù)庫。
5.根據(jù)權利要求1所述的基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,其中所述步驟四具體包括:截獲并解析數(shù)據(jù)庫向Web服務器的返回結果,通過將所述返回結果與數(shù)據(jù)庫字段替換規(guī)則集合進行對比,判定所述返回結果中是否含有與數(shù)據(jù)庫字段替換規(guī)則集合中的替換字符串相同的字符串,若是則將所述字符串按照數(shù)據(jù)庫字段替換規(guī)則集合進行還原,若否則不進行還原操作,最后將返回結果發(fā)往Web服務器。
6.根據(jù)權利要求1所述的基于動態(tài)變換的SQL注入攻擊防御方法,其特征在于,其中步驟五具體包括以下步驟:
(5-1)、每隔一段時間生成一套新的網(wǎng)站程序SQL關鍵字替換規(guī)則集合;
(5-2)、按照新的網(wǎng)站程序SQL關鍵字替換規(guī)則集合對Web服務器上網(wǎng)站程序中的SQL語句進行更新替換操作,將SQL語句中的SQL關鍵字按照新的網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換成對應的替換字符串;
(5-3)、刪除舊的網(wǎng)站程序SQL關鍵字替換規(guī)則集合。
7.一種基于動態(tài)變換的SQL注入攻擊防御系統(tǒng),其特征在于,包括:
替換規(guī)則構建單元,用于構建數(shù)據(jù)庫字段替換規(guī)則集合和網(wǎng)站程序SQL關鍵字替換規(guī)則集合,所述數(shù)據(jù)庫字段替換規(guī)則集合中包括有SQL關鍵字和每一個SQL關鍵字所對應的替換字符串,所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合中包括有SQL關鍵字和每一個SQL關鍵字所對應的替換字符串;
初始化替換單元,用于進行初始化替換操作,將數(shù)據(jù)庫中出現(xiàn)的與SQL關鍵字形式相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,將Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換成對應的替換字符串;
訪問數(shù)據(jù)處理單元,用于截獲并解析Web服務器發(fā)往數(shù)據(jù)庫的SQL語句,首先把SQL語句中出現(xiàn)的與SQL關鍵字形式相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,接著把SQL語句中按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換后出現(xiàn)的替換字符串再次按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合還原為對應的SQL關鍵字,然后將所述SQL語句發(fā)往數(shù)據(jù)庫;
返回結果處理單元,用于截獲并解析數(shù)據(jù)庫向Web服務器的返回結果,將返回結果中出現(xiàn)的與數(shù)據(jù)庫字段替換規(guī)則集合中的替換字符串相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合進行還原,然后將返回結果發(fā)往Web服務器;
動態(tài)變換單元,用于動態(tài)變換所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合,并根據(jù)變換后的網(wǎng)站程序SQL關鍵字替換規(guī)則集合對Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字進行更新替換操作。
8.一種基于動態(tài)變換的SQL注入攻擊防御系統(tǒng),其特征在于,包括:替換規(guī)則初始化單元、數(shù)據(jù)庫字段替換單元、網(wǎng)站程序SQL關鍵字替換單元、通信數(shù)據(jù)處理單元、替換規(guī)則動態(tài)變換單元和替換規(guī)則存儲單元;
所述替換規(guī)則初始化單元基于用戶配置信息構建數(shù)據(jù)庫字段替換規(guī)則集合和網(wǎng)站程序SQL關鍵字替換規(guī)則集合,并將數(shù)據(jù)庫字段替換規(guī)則集合及其生成時間存儲于替換規(guī)則存儲單元,將網(wǎng)站程序SQL關鍵字替換規(guī)則集合及其生成時間存儲于替換規(guī)則存儲單元,同時通知數(shù)據(jù)庫字段替換單元按照數(shù)據(jù)庫字段替換規(guī)則集合完成數(shù)據(jù)庫中與SQL關鍵字形式相同的字符串的初始化替換操作,通知網(wǎng)站程序SQL關鍵字替換單元按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合完成Web服務器上網(wǎng)站程序中的SQL語句的初始化替換操作,其中所述數(shù)據(jù)庫字段替換規(guī)則集合和所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合均包括有SQL關鍵字和每一個SQL關鍵字所對應的替換字符串;
所述數(shù)據(jù)庫字段替換單元根據(jù)替換規(guī)則初始化單元的替換通知,按照替換規(guī)則存儲單元中存儲的數(shù)據(jù)庫字段替換規(guī)則集合,將數(shù)據(jù)庫中出現(xiàn)的與SQL關鍵字形式相同的字符串替換為對應的替換字符串;
所述網(wǎng)站程序SQL關鍵字替換單元根據(jù)替換規(guī)則初始化單元或替換規(guī)則動態(tài)變換單元的替換通知,按照替換規(guī)則存儲單元中存儲的網(wǎng)站程序SQL關鍵字替換規(guī)則集合,將Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字替換為對應的替換字符串;
所述通信數(shù)據(jù)處理單元包括訪問數(shù)據(jù)處理模塊和返回結果處理模塊,所述訪問數(shù)據(jù)處理模塊截獲并解析Web服務器發(fā)往數(shù)據(jù)庫的SQL語句,首先把SQL語句中出現(xiàn)的與SQL關鍵字形式相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,接著把SQL語句中按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合替換后出現(xiàn)的替換字符串再次按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合還原為對應的SQL關鍵字,然后將所述SQL語句發(fā)往數(shù)據(jù)庫;所述返回結果處理模塊截獲并解析數(shù)據(jù)庫向Web服務器的返回結果,將返回結果中出現(xiàn)的與數(shù)據(jù)庫字段替換規(guī)則集合中替換字符串相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合進行還原,然后將返回結果發(fā)往Web服務器;
所述替換規(guī)則動態(tài)變換單元動態(tài)變換替換規(guī)則存儲單元中存儲的網(wǎng)站程序SQL關鍵字替換規(guī)則集合,并通知網(wǎng)站程序SQL關鍵字替換單元按照變換后新的網(wǎng)站程序SQL關鍵字替換規(guī)則集合對Web服務器上網(wǎng)站程序中的SQL語句中的SQL關鍵字進行替換操作,待替換操作完成后刪除替換規(guī)則存儲單元中存儲的舊的網(wǎng)站程序SQL關鍵字替換規(guī)則集合。
9.根據(jù)權利要求8所述的基于動態(tài)變換的SQL注入攻擊防御系統(tǒng),其特征在于,所述替換規(guī)則存儲單元包括第一存儲模塊和第二存儲模塊,所述數(shù)據(jù)庫字段替換規(guī)則集合及其生成時間存儲于所述第一存儲模塊中,所述網(wǎng)站程序SQL關鍵字替換規(guī)則集合及其生成時間存儲于所述第二存儲模塊中;所述訪問數(shù)據(jù)處理模塊截獲Web服務器發(fā)往數(shù)據(jù)庫的SQL語句后,查詢所述第一存儲模塊中的數(shù)據(jù)庫字段替換規(guī)則集合,以判定所述SQL語句中是否含有與數(shù)據(jù)庫字段替換規(guī)則集合中的SQL關鍵字形式相同的字符串,若是則將所述字符串按照數(shù)據(jù)庫字段替換規(guī)則集合替換為對應的替換字符串,若否則不作處理,然后所述訪問數(shù)據(jù)處理模塊查詢所述第二存儲模塊中的網(wǎng)站程序SQL關鍵字替換規(guī)則集合,將所述SQL語句中含有的與網(wǎng)站程序SQL關鍵字替換規(guī)則集合中的替換字符串相同的字符串按照網(wǎng)站程序SQL關鍵字替換規(guī)則集合還原為對應的SQL關鍵字,然后將所述SQL語句發(fā)往數(shù)據(jù)庫;所述返回結果處理模塊截獲數(shù)據(jù)庫向Web服務器的返回結果后,查詢所述第一存儲模塊中的數(shù)據(jù)庫字段替換規(guī)則集合,將返回結果中出現(xiàn)的與數(shù)據(jù)庫字段替換規(guī)則集合中的替換字符串相同的字符串按照數(shù)據(jù)庫字段替換規(guī)則集合進行還原,然后將返回結果發(fā)往Web服務器。
10.權利要求7-9任一項所述的基于動態(tài)變換的SQL注入攻擊防御系統(tǒng)的用途,其特征在于,將所述基于動態(tài)變換的SQL注入攻擊防御系統(tǒng)布置于Web服務器上或者布置于Web服務器和數(shù)據(jù)庫之間。