SQL防注入總結(jié)

0x00 背景

自己一個人學(xué)了這么久的web安全沫屡,感覺需要一些總結(jié),加上今天下午電話面試總被問到的問題俱饿,自己總結(jié)了一下寫出來和大家分享筑悴。(小白一個,也算自己記錄一下稍途,大佬勿噴)

0x01SQL注入實例

這里就以DVWA來做個示范阁吝,畢竟主要講防御

low等級的注入無過濾直接提交id

LOW SQL

medium等級使用了mysqli_real_escape_string函數(shù)進行轉(zhuǎn)義,被轉(zhuǎn)義的包括\x00,\n,\r,\,’,”,\x1a(參考菜鳥教程)但是這種簡單的轉(zhuǎn)義很容易就被各種編碼方式繞過械拍。

MEDIUM SQL

high等級的代碼采用了窗口跳轉(zhuǎn)的方式突勇,但是對于上交的數(shù)據(jù)始終沒有處理就提交了,只是簡單的在其后加了一個LIMIT 1坷虑,來限制取數(shù)據(jù)的行數(shù)甲馋,但是只要簡單的使用#或者--+來注釋掉就可以了。(感覺這個應(yīng)該屬于midium)

HIGH SQL

high等級的代碼加入了token機制和PDO迄损,基本防御了SQL注入定躏。反正以我的水平和在網(wǎng)上查找的資料來看,好像沒有成功注入的芹敌。

HIGH SQL

0x02

首先大前提是驗證都處于服務(wù)器端痊远,前端的驗證形同虛設(shè)。

(1)使用PDO

PDO是PHP的一個擴展氏捞,為PHP訪問數(shù)據(jù)庫提供一個統(tǒng)一的接口碧聪,這就表明PDO可以連接不同類型的數(shù)據(jù)庫系統(tǒng),但是我們還是需要自己編寫SQL語句液茎。PDO隨PHP5.1發(fā)行逞姿,在PHP5.0的PECL擴展中也可以使用,無法運行于之前的PHP版本捆等,可以在phpinfo()中查看是否支持PDO滞造。

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root');//設(shè)置編碼以防止亂碼

$sql ="SELECT id FROM user WHERE email=:email";

$stmt = $pdo->prepare($sql);

$email = filter_input(INPUT_GET,'email');

$stmt->bindValue(':email', $email);

上述代碼中,:email是具名占位符栋烤,可以安全的綁定任意值谒养。預(yù)處理語句會自動過濾$email的值,防止數(shù)據(jù)庫收到SQL注入攻擊班缎。一個sql語句字符串中可以綁定多個具名占位符蝴光,然后在預(yù)處理語句中通過bindValue()方法綁定各個占位符的值她渴。

(2)使用mysqli_query

MySQLi 擴展是在 PHP 5.0.0 版本中引進的,且只針對mysql數(shù)據(jù)庫蔑祟,但是其實大概原理和DBO相似趁耗,都是采用了prepare?+?bind?的寫法。

$mysqli?=?new?mysqli('localhost','username','password','database');??

$query?=?$mysqli->prepare('??

???SELECT?*?FROM?users??

???WHERE?username?=????

???AND?email?=????

???AND?last_login?>??');?

$query->bind_param('sss',?'test',?$mail,?time()?-?3600);??

$query->execute();

這個問號(?)綁定參數(shù)看上去很短疆虚,但是相比名稱式參數(shù)缺少了靈活性苛败,而且迫使開發(fā)者必須保證參數(shù)的順序,有時候讓人覺得很蛋疼径簿。而且不幸的是MySQLi并不支持名稱式參數(shù)罢屈。

(3)對輸入進行轉(zhuǎn)義處理

這一類主要是通過編程語言的預(yù)定義函數(shù)對輸入轉(zhuǎn)義,包括mysql_real_escape_string篇亭、addslashes()等缠捌,但是這一類函數(shù)存在一定的安全風(fēng)險,不推薦使用译蒂。參見文章:PHP防SQL注入不要再用addslashes和mysql_real_escape_string了

(4)限制輸入的內(nèi)容

這其中包括對select曼月、union等的過濾,但是這樣一方面帶來了對于用戶使用的舒適性也有可能過濾不嚴格導(dǎo)致形同虛設(shè)柔昼。

(5)對輸入編碼

//這也算是一種處理各種注入的萬能方法了哑芹,但是不足就是每次存取都需要編碼或者解密,效率可能會降低捕透。

SELECT?password?FROM?users?WHERE?name?=?'root'????????????--普通方式??

SELECT?password?FROM?users?WHERE?name?=?0x726f6f74????????--防止注入??

SELECT?password?FROM?users?WHERE?name?=?UNHEX('726f6f74')?--防止注入??

(6)使用存儲過程

存儲過程是各種數(shù)據(jù)庫的一種函數(shù)式編程方法聪姿,類似于預(yù)處理,只分配必要的數(shù)據(jù)庫許可權(quán)限乙嘀,有助于減輕SQL注入的影響——限制攻擊者只能調(diào)用存儲過程末购,從而限制了能夠訪問或修改的數(shù)據(jù)。由于SQL注入不僅能發(fā)生在應(yīng)用層乒躺,還能發(fā)生在數(shù)據(jù)庫層招盲,因此如果攻擊者將惡意語句寫入到存儲過程中,雖然訪問和修改數(shù)據(jù)受到限制嘉冒,但是如果在后續(xù)的動態(tài)SQL中使用了該輸入,仍可能造成SQL注入咆繁。

以上就是目前我能知道的所有了讳推,需要學(xué)習(xí)的還很多。FIGHTING~~~

如果誰看到我這個覺得不深入玩般,給大家推薦一篇更詳細的文章:SQL注入之代碼層防御

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末银觅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坏为,更是在濱河造成了極大的恐慌究驴,老刑警劉巖镊绪,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洒忧,居然都是意外死亡蝴韭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門熙侍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榄鉴,“玉大人,你說我怎么就攤上這事蛉抓∏斐荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵巷送,是天一觀的道長驶忌。 經(jīng)常有香客問我,道長笑跛,這世上最難降的妖魔是什么付魔? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮堡牡,結(jié)果婚禮上抒抬,老公的妹妹穿的比我還像新娘。我一直安慰自己晤柄,他們只是感情好擦剑,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芥颈,像睡著了一般惠勒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爬坑,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天纠屋,我揣著相機與錄音,去河邊找鬼。 笑死流炕,一個胖子當(dāng)著我的面吹牛蜂科,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播族铆,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哭尝!你這毒婦竟也來了哥攘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逝淹,沒想到半個月后耕姊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡栅葡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年茉兰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妥畏。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡邦邦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出醉蚁,到底是詐尸還是另有隱情燃辖,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布网棍,位于F島的核電站黔龟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滥玷。R本人自食惡果不足惜氏身,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惑畴。 院中可真熱鬧蛋欣,春花似錦、人聲如沸如贷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杠袱。三九已至尚猿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楣富,已是汗流浹背凿掂。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纹蝴,地道東北人庄萎。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像塘安,于是被迫代替她去往敵國和親惨恭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Web安全簡史 在Web1.0時代耙旦,人們更多是關(guān)注服務(wù)器端動態(tài)腳本語言的安全問題,比如將一個可執(zhí)行腳本(俗稱Web...
    潘良虎閱讀 3,930評論 3 72
  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息,讓PHP新手誤入歧途免都,傳播著錯誤的實踐和糟糕的代碼锉罐,這必須得到糾正...
    layjoy閱讀 21,676評論 7 118
  • 注入攻擊 OWASP將注入攻擊和跨站腳本攻擊(XSS)列入網(wǎng)絡(luò)應(yīng)用程序十大常見安全風(fēng)險。實際上绕娘,它們會一起出現(xiàn)脓规,因...
    OneAPM閱讀 2,599評論 1 15
  • 六項精進打卡格式 姓名:張人杰 日精進打卡第40天 【打卡始于2017.10.14持續(xù)于2017.11....
    上善若水心靜思銳閱讀 189評論 1 2
  • 一一得一侨舆、一二得二、一三得三……七七四十九……八九七十二绢陌、九九八十一 01 前幾天挨下,陳可辛導(dǎo)演的《三分鐘》火遍朋友...
    令子呀閱讀 477評論 5 3