[發(fā)明專利]一種基于語法分析的SQL防注入方法和裝置在審
| 申請?zhí)枺?/td> | 201710710787.4 | 申請日: | 2017-08-18 |
| 公開(公告)號: | CN107526968A | 公開(公告)日: | 2017-12-29 |
| 發(fā)明(設(shè)計(jì))人: | 劉浩 | 申請(專利權(quán))人: | 鄭州云海信息技術(shù)有限公司 |
| 主分類號: | G06F21/56 | 分類號: | G06F21/56;G06F17/30 |
| 代理公司: | 濟(jì)南誠智商標(biāo)專利事務(wù)所有限公司37105 | 代理人: | 王汝銀 |
| 地址: | 450018 河南省鄭州市*** | 國省代碼: | 河南;41 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 語法分析 sql 注入 方法 裝置 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,尤其是一種基于語法分析的SQL防注入方法和裝置。
背景技術(shù)
SQL注入是一種常用的且易于實(shí)施的攻擊手段,對網(wǎng)絡(luò)應(yīng)用程序的安全構(gòu)成嚴(yán)重威脅。目前SQL注入的防范主要有手工檢查、自動過濾、SQL命令編碼以及專用API等幾種方法。
手工檢查要求應(yīng)用開發(fā)人員在程序中添加針對用戶輸入信息的檢查代碼。開發(fā)人員需確切地區(qū)分什么是合法的輸入信息,才能夠精確過濾掉惡意輸入。然而復(fù)雜架構(gòu)下的應(yīng)用程序需要處理大量用戶輸入,手工檢查不僅極大地考驗(yàn)著開發(fā)人員的防SQL注入編碼經(jīng)驗(yàn),也讓程序變得難以維護(hù)。對于已上線運(yùn)行的應(yīng)用而言,為程序訂制防SQL注入的升級補(bǔ)丁費(fèi)用太高。
自動過濾是在網(wǎng)絡(luò)服務(wù)前端增加一個應(yīng)用級的防火墻,在接收到用戶輸入信息時(shí)進(jìn)行集中檢查,過濾掉惡意輸入,而過濾程序通常采用特征字符串匹配算法,往往僅憑預(yù)先定義好的一系列正則表達(dá)式進(jìn)行過濾,精心構(gòu)造的惡意輸入很容易繞過這種過濾程序。
SQL命令編碼方法假設(shè)用戶輸入信息中不應(yīng)該包含SQL命令,首先將SQL語句中的非用戶輸入部分的所有控制命令編碼,編碼后的SQL語句在提交給數(shù)據(jù)庫執(zhí)行前先經(jīng)過SQL代理解碼,SQL代理如果發(fā)現(xiàn)無法解碼的SQL命令,則判定為用戶輸入了非法的控制命令。這種方法涉及到對Web服務(wù)器和數(shù)據(jù)庫服務(wù)器平臺軟件的大量修改,實(shí)現(xiàn)和安裝都十分繁瑣。很多新的高級語言將常用的數(shù)據(jù)庫操作封裝成一些專用的API函數(shù),程序員不需要構(gòu)造SQL字符串,因此也不會有SQL注入的風(fēng)險(xiǎn)。新的應(yīng)用程序使用專用API能夠避免SQL注入,然而對于已經(jīng)運(yùn)行的大量應(yīng)用而言則無能為力。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于語法分析的SQL防注入方法和裝置,該方法采用簡單的特殊SQL文法就能夠過濾絕大多數(shù)SQL注入攻擊,不需要修改已有的應(yīng)用程序代碼,也不需要修改任何服務(wù)器平臺軟件。
為實(shí)現(xiàn)上述目的,本發(fā)明采用下述技術(shù)方案:
一種基于語法分析的SQL防注入方法,包括以下步驟:
獲取用戶表單輸入;
對用戶表單輸入進(jìn)行預(yù)處理操作;
根據(jù)構(gòu)建的詞法規(guī)則識別預(yù)處理操作后語句中的詞素;
根據(jù)構(gòu)建的語法規(guī)則對詞素進(jìn)行語法分析,提煉出抽象語法結(jié)構(gòu)串;
判斷抽象語法結(jié)構(gòu)串與標(biāo)準(zhǔn)結(jié)構(gòu)串是否匹配,如果匹配,則判定用戶輸入為簡單結(jié)構(gòu),不構(gòu)成SQL注入攻擊;如果不匹配,則判定用戶輸入為復(fù)雜結(jié)構(gòu),構(gòu)成SQL注入攻擊。
進(jìn)一步地,在對用戶表單輸入進(jìn)行預(yù)處理操作之前,還包括:
提取用戶表單輸入,加入關(guān)鍵字組裝成完整的SQL語句。
進(jìn)一步地,所述預(yù)處理操作,包括:
對用戶表單輸入進(jìn)行過濾注釋和轉(zhuǎn)換編碼,所述過濾注釋包括去掉用戶表單輸入中的干擾字符串,所述轉(zhuǎn)換編碼包括對用戶表單輸入中的十六進(jìn)制編碼進(jìn)行轉(zhuǎn)換。
進(jìn)一步地,所述根據(jù)構(gòu)建的詞法規(guī)則識別預(yù)處理操作后語句中的詞素,包括,
識別出預(yù)處理后的用戶表單輸入中的單詞,判斷單詞是屬于關(guān)鍵字、變量名、常量名中的哪一種,并形成詞素列表。
進(jìn)一步地,所述根據(jù)構(gòu)建的語法規(guī)則對詞素進(jìn)行語法分析,提煉出抽象語法結(jié)構(gòu)串,包括:
對詞素列表進(jìn)行語法分析,根據(jù)關(guān)鍵字提煉出用戶輸入的抽象字符串,并判斷抽象字符串的類型。
進(jìn)一步地,所述抽象字符串的類型,包括:
非注入,指正常用戶輸入,不構(gòu)成注入攻擊;值注入,將表達(dá)式右值替換為子查詢語句或算術(shù)表達(dá)式;條件注入,擴(kuò)展SQL語句的條件表達(dá)式;組合注入,利用SQL組合運(yùn)算符構(gòu)造復(fù)合查詢來得到額外的數(shù)據(jù)庫信息;語句注入,在原SQL語句后面附加額外的語句。
進(jìn)一步地,所述標(biāo)準(zhǔn)結(jié)構(gòu)串為非注入輸入類型,語法表達(dá)式為A=V andA=V,即單個或多個A=V,這里的A表示變量,V表示值。
一種基于語法分析的SQL防注入裝置,包括:
輸入提取模塊,完成對用戶輸入的提取;
預(yù)處理模塊,完成對用戶輸入的過濾注釋和轉(zhuǎn)換編碼的輔助工作;
詞素列表提取模塊,完成對用戶輸入單詞的提取,并對用戶輸入單詞的詞性進(jìn)行分析形成詞素列表;
語法結(jié)構(gòu)分析模塊,對詞素列表進(jìn)行分析,完成抽象字符串的抽取;
語法結(jié)構(gòu)串比對模塊,對抽取抽象字符串與標(biāo)準(zhǔn)字符串進(jìn)行比較,判斷是否是SQL注入。
進(jìn)一步地,還包括:
SQL語句組裝模塊,對提取的用戶輸入加入關(guān)鍵字形成完整的SQL語句。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于鄭州云海信息技術(shù)有限公司,未經(jīng)鄭州云海信息技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710710787.4/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F21-00 防止未授權(quán)行為的保護(hù)計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)的安全裝置
G06F21-02 .通過保護(hù)計(jì)算機(jī)的特定內(nèi)部部件
G06F21-04 .通過保護(hù)特定的外圍設(shè)備,如鍵盤或顯示器
G06F21-06 .通過感知越權(quán)操作或外圍侵?jǐn)_
G06F21-20 .通過限制訪問計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)網(wǎng)絡(luò)中的節(jié)點(diǎn)
G06F21-22 .通過限制訪問或處理程序或過程





