亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL解決SQL注入的另類方法詳解

2024-07-24 13:09:17
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL解決SQL注入的另類方法,結合實例形式列舉分析了幾種防止SQL注入的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了MySQL解決SQL注入的另類方法。分享給大家供大家參考,具體如下:

問題解讀

我覺得,這個問題每年帶來的成本可以高達數十億美元了。本文就來談談,假定我們有如下 SQL 模板語句:

select * from T where f1 = '{value1}' and f2 = {value2}

現在我們需要根據用戶輸入值填充該語句:

value1=hellovalue2=5

我們得到了下面的 SQL 語句,我們再提交給數據庫:

select * from T where f1='hello' and f2=5

問題在于,攻擊者可以構造如下的用戶輸入值:

value1=anything' or 1=1 or f1='whatevervalue2=5

拼接好的最終語句就變成了:

select * from T where f1='anything' or 1=1 or f1='whatever' and f2=5

攻擊者成功地改變了模板語句的語義。這種問題不單單發生在 SQL 上,還出現在通常使用模板的任何語言上,比如 HTML 和 shell 腳本。

常規解決方案的說明

SQL 是具備任意性和一致性的公理,token 和派生規則構成其公理化基礎。要注意的一個詞語是「任意性」。與 SQL 等價的公理化數不勝數。對于這種任意等價的表示,每一條合法的語句都能被準確地映射到 SQL 里的合法語句,其它語言亦然。在這種任意等價表示中,如果某語句是不合法的,那么它在 SQL 里也是不合法的。攻擊者不可能構造出可以滿足任何可能的、任意與 SQL 等價的規則。

策略1:根據不同的派生規則,用另一種語法擴展模板語句

例子1:前綴語言

SQL 使用中綴表示法注1。中綴表示法等價于 lisp 風格的前綴表示法注2。中綴與前綴:

a OP1 b OP2 c <=> (OP1 a (OP2 b c))

a、b、c 是標識符或值,OP1、OP2 是操作符或功能。

前綴表示法的示例語句:

(select * T (and (= f1 '{value1}') (= f2 {value2})))

該語句是等價的。它們在語義上屬于外延。自動把 SQL 的中綴表示法轉換成前綴表示法或其它表示法,都不算問題了。然而,攻擊者的注入在前綴語法方面就是不合法的:

復制代碼代碼如下:
(select * T (and (= f1  'anything' or 1=1 or a='whatever') (= f2 5)))

 

語法錯誤。攻擊者想要的是:

復制代碼代碼如下:
(select * T (or (= f1 'anything') (or (=1 1) (and (= a 'whatever') (= f2 5)))))

 

這是不同的。攻擊者的注入不能輸出合法的前綴語言。

例子2:歐拉表示法

另一個替代方法將數得著歐拉表示法了。從中綴表示法到歐拉:

a OP1 b OP2 c <=> OP1(a,OP2(b,c))

例子中的語句:

select( *,T,and(=(f1,'{value1}'),=(f2,{value2})))

而注入的語句將出現語法錯誤:

復制代碼代碼如下:
select( *,T,and(=(f1,'anything' or 1=1 or a='whatever'),=(f2,5)))

 

攻擊者本來是想寫成:

復制代碼代碼如下:
select( *,T,or(=(f1,'anything',or(=(1,1),and(=(a,'whatever'),=(f2,5))))))

 

攻擊者正在做錯誤的事情。他的注入根本就沒有注意到所選的任意標記法。

例子3:對象標記法(object notation)

還有一種替代方法,對象標記法。從前綴表示法到對象:

a OP1 b OP2 c <=> a.OP1(b).OP2(c)

例子的代碼:

T.where(f1.=('{value1}').and(f2.=({value2})).select(*)

注入再一次折戟于語法:

T.where(f1.=('anything' or 1=1 or a='whatever').and(f2.=5)).select(*)

我不再提供正確答案了,讀者可以當做練習,看看攻擊者應該寫成什么樣子。

策略2:為 SQL 選擇其它任意 token

keyword 常常是一門語言里的任意 token。重要的是它們在派生規則里的位置、而非它們的任意體現。你總是可以用其它 keyword 替換現有 keyword,并且來回轉換。舉個例子,我們可以將下面 SQL 語句中的 keyword 轉換成我們姑且稱為「任意的 brainfuck」:

復制代碼代碼如下:
{"select":"iph0ohKi", "*":"ieZoh4xa", "from":"aeZi5uja", "where":"OoJ4aX4n", "=":"eeQu2Zad", "(":"eiD5aera",")":"Soo2uach", "or":"Ocaig5Es"}

 

為了論證起見,我們將把操作數映射為 半任意的結構化序列:

T <=> @phai1Oa6@T@hello <=> @phai1Oa6@hello@

phai1Oa6 是任意選取的字符序列。對于當前情形,例子:

select * from T where f1 = '{value1}' and f2 = {value2}

變成了:

iph0ohKi ieZoh4xa aeZi5uja @phai1Oa6@T@ OoJ4aX4n @phai1Oa6@f1@ eeQu2Zad '{value1}' @phai1Oa6@and@ @phai1Oa6@f2@ eeQu2Zad {value2}

這是合法的、任意的 brainfuck 語言。經過注入之后,我們得到了:

iph0ohKi ieZoh4xa aeZi5uja @phai1Oa6@T@ OoJ4aX4n @phai1Oa6@f1@ eeQu2Zad 'anything' or 1=1 or a='whatever' @phai1Oa6@and@ @phai1Oa6@f2@ eeQu2Zad 5

你可以看到,它包含的 token 有 'or' 和 '=',它們在任意的 brainfuck 語言中是不合法的。我們的語法說,你必須這樣使用:

or <=> Ocaig5Es= <=> eeQu2Zad

這些 token 也不是操作數,因為它們將只能被視作:

or <=> @phai1Oa6@or@= <=> @phai1Oa6@=@

換句話說,注入之后的語句就變得不合法、也不可用了。

策略3:驗證不變量

你數數下面模板語句例子中的 token 有幾個?

[1] select [2] * [3] from [4] T [5] where [6] f1 [7] = [8] '{value1}' [9] and [10] f2 [11] = [12] {value2}
12 個。模板填充之后,總數必須仍然為 12,但是我們卻看到了攻擊者所引發的結果:

[1] select [2] * [3] from [4] T [5] where [6] f1 [7] = [8] 'anything' [9] or [10] 1 [11] = [12] 1 [13] or [14] a [15] = [16] 'whatever' [17] and [18] f2 [19] = [20] 5

現在有 20 個 token 。違反這種不變量,就暴露了有問題的地方。同樣適用于相同語句的表示,除了任意的、brainfuck 語言。模板的填充根本不可能導致 token 數量的變化。

事實上,你可以試著使用其它不變量,并在填充之后進行驗證。攻擊者必須和它們保持一致。

結論

有些人提倡,程序員在填充 SQL 模板時,應該更加小心。應對 SQL 注入問題,只是需要在編程方面多加小心。很明顯,這種方式算不上解決方案。人們仍然在校驗用戶輸入值方面出現錯誤,最終接受了帶有惡意的用戶輸入值。換句話說,單憑我們所有人更努力地工作,是無法根本解決這種問題的。

真正的解決方案在于,SQL 語句本身的任意性,并要求所有現存不變量都符合任意的等價結構的規則。無需程序員的干預,就能自動完成。

攻擊者不得不符合一種未知的、任意的 brainfuck 語法的規則。想要符合一組未知的規則,將是難以解決的問題。因此,攻擊者通常無法得手。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本一区二区在线免费播放| 日韩三级成人av网| 日本伊人精品一区二区三区介绍| 日韩中文有码在线视频| 国产成人一区二区三区电影| 亚洲图片在区色| 国产精品wwwwww| 在线看欧美日韩| 亚洲精品一区二区在线| 原创国产精品91| 57pao成人国产永久免费| 57pao国产成人免费| 久久精品影视伊人网| 亚洲午夜女主播在线直播| 国产999精品| 国产自摸综合网| 一本久久综合亚洲鲁鲁| 中文字幕欧美视频在线| xxx成人少妇69| 日韩极品精品视频免费观看| 亚洲美女在线看| 精品国产91乱高清在线观看| 欧日韩不卡在线视频| 一本一本久久a久久精品牛牛影视| 欧美成人在线网站| 久久成人在线视频| 久久国产精品久久久久久久久久| 欧美怡红院视频一区二区三区| 一本色道久久88综合亚洲精品ⅰ| 亚洲人成电影网站| 午夜精品久久久久久久男人的天堂| 欧美日韩国产中文字幕| 国产成人精品久久二区二区| 国产精品xxxxx| 色婷婷久久一区二区| 精品久久久久久中文字幕大豆网| 中文字幕亚洲欧美| 国产精品极品美女在线观看免费| 2019最新中文字幕| 日韩av中文字幕在线免费观看| 激情成人中文字幕| 在线视频日韩精品| 情事1991在线| 亚洲国产精品电影| 欧美日韩成人在线观看| 日韩在线不卡视频| 欧美激情网站在线观看| 久久韩剧网电视剧| 精品福利在线看| 亚洲男人av在线| 亚洲欧洲一区二区三区在线观看| 亚洲天堂av在线免费观看| 欧美激情小视频| 欧美性xxxx极品高清hd直播| 中文字幕国产精品久久| 日韩在线视频免费观看高清中文| 欧美精品一区二区三区国产精品| 亚洲人在线观看| 亚洲日本中文字幕免费在线不卡| 亚洲精品久久久久久久久久久久| 亚洲视频免费一区| 国产91精品黑色丝袜高跟鞋| 亚洲美女中文字幕| 欧美亚洲成人精品| 欧美怡春院一区二区三区| 在线观看91久久久久久| 欧美极品美女视频网站在线观看免费| 色婷婷**av毛片一区| 国产精品中文字幕在线| 国产精品揄拍500视频| 国产精品成人免费电影| 欧美日韩亚洲视频一区| 久久久久久69| 国语自产精品视频在线看一大j8| 亚洲精品videossex少妇| 91在线精品视频| 精品亚洲va在线va天堂资源站| 国产精品视频久久久| 亚洲精品电影网| 国产美女精品视频免费观看| 国产精品免费久久久久久| 中日韩美女免费视频网站在线观看| 国产精品国产自产拍高清av水多| 秋霞成人午夜鲁丝一区二区三区| 亚洲理论在线a中文字幕| 亚洲精品美女网站| 国产精品青草久久久久福利99| 成人福利网站在线观看| 麻豆国产精品va在线观看不卡| 久久久综合免费视频| 欧美性猛交xxxx黑人| 亚洲自拍在线观看| 久久99视频免费| 国外视频精品毛片| 亚洲国产女人aaa毛片在线| 人人澡人人澡人人看欧美| 欧美另类在线播放| 中文字幕欧美视频在线| 亚洲韩国欧洲国产日产av| 亚洲精品欧美日韩专区| 91av在线网站| 成人有码视频在线播放| 国产日韩精品在线观看| 成人美女av在线直播| 国产精品成人av性教育| 国产精品av在线播放| 欧美在线一区二区三区四| 欧美精品videos性欧美| 欧美精品999| 亚洲国产日韩欧美综合久久| 国产精品电影在线观看| 欧美性猛交xxxxx免费看| 中文字幕无线精品亚洲乱码一区| 日韩国产高清视频在线| 91精品国产99久久久久久| 亚洲国产精品久久精品怡红院| 91精品国产综合久久香蕉922| 国产精品www色诱视频| 亚洲另类图片色| 国产成人精品一区二区三区| 亚洲自拍高清视频网站| 日韩欧美高清视频| 欧美一区二区.| 8050国产精品久久久久久| 久久中文字幕国产| 欧美日韩亚洲视频| 欧美激情国产精品| 亚洲国产欧美一区| 91亚洲精品久久久| 97国产精品视频人人做人人爱| 国产精品91久久| 成人www视频在线观看| 2019国产精品自在线拍国产不卡| 亚洲欧美999| 久久手机精品视频| 国产九九精品视频| 亚洲一区二区免费| 欧美亚洲国产日韩2020| 91精品视频在线看| 亚洲成人av资源网| 亚洲欧美一区二区三区四区| 免费av在线一区| 欧美性感美女h网站在线观看免费| 97香蕉超级碰碰久久免费软件| www.日韩欧美| 欧美激情精品久久久久久蜜臀| 在线精品国产欧美| 午夜精品蜜臀一区二区三区免费| 黄色成人av在线| 日韩美女视频免费在线观看| 日韩视频―中文字幕| 欧美成人网在线| 日本中文字幕不卡免费| 欧洲亚洲免费在线| 日韩禁在线播放| 亚洲a中文字幕| 亚洲人成网站色ww在线| 欧美亚洲在线视频| 日韩在线www| 日韩免费精品视频| 成人字幕网zmw| 国产日韩欧美电影在线观看| 亚洲精品视频网上网址在线观看| 日韩欧美在线免费|