網(wǎng)站SQL注入攻擊
2022-09-02?
圍觀熱度 1353?技術(shù)推薦
如果說數(shù)據(jù)庫(kù)是一個(gè)網(wǎng)站的心臟,那么,SQL注入攻擊絕對(duì)是一把直刺網(wǎng)站心臟的匕首,讓網(wǎng)站陷入萬(wàn)劫不復(fù)之地。SQL注入(SQL Injection)攻擊,是眾多針對(duì)腳本系統(tǒng)的攻擊中最常見的一種攻擊手段,也是危害最大的一種攻擊手段。由于SQL注入攻擊的易學(xué)易用,使得網(wǎng)上各種SQL注入攻擊事件成風(fēng),對(duì)網(wǎng)站安全的危害十分嚴(yán)重。目前,引起SQL注入的原因主要是程序員在編寫腳本程序時(shí)對(duì)特殊字符過濾不完全引起的,造成此現(xiàn)象主要是由于程序員對(duì)腳本安全的意識(shí)不夠,或者是考慮不周所造成的。因此,深入了解與SQL注入攻擊的成因及相應(yīng)的攻擊手段與防范方法,對(duì)每一個(gè)網(wǎng)站安全工作者來說,都是必需的。
那么,究竟什么是SQL注入(SQL Injection)攻擊呢?來自官方的說法是:“當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動(dòng)態(tài)SQL語(yǔ)句以訪問數(shù)據(jù)庫(kù)時(shí),會(huì)發(fā)生SQL注入攻擊。如果代碼使用存儲(chǔ)過程,而這些存儲(chǔ)過程作為包含未篩選的用戶輸入的字符串來傳遞時(shí),也會(huì)發(fā)生SQL注入攻擊。SQL注入可能導(dǎo)致攻擊者能夠使用應(yīng)用程序登錄,并在數(shù)據(jù)庫(kù)中執(zhí)行命令。如果應(yīng)用程序使用特權(quán)過高的賬戶連接到數(shù)據(jù)庫(kù),這種問題會(huì)變得很嚴(yán)重。”也就是說,SQL注入攻擊是建立在網(wǎng)站數(shù)據(jù)庫(kù)上的一種攻擊方式。因此,了解一些常見的數(shù)據(jù)庫(kù)分類、數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句,以及數(shù)據(jù)庫(kù)在網(wǎng)站中的調(diào)用,是學(xué)習(xí)分析SQL注入攻擊的基礎(chǔ)。從上面對(duì)SQL注入攻擊的解釋可以看出,SQL注入的攻擊目標(biāo)就是數(shù)據(jù)庫(kù),或者將數(shù)據(jù)庫(kù)作為跳板,進(jìn)而攻擊數(shù)據(jù)庫(kù)所有的服務(wù)器。那么,要深入地了解SQL注入攻擊,就不得不對(duì)數(shù)據(jù)庫(kù)有所了解。
我們先來了解一下什么是“數(shù)據(jù)庫(kù)”。簡(jiǎn)單地說,“數(shù)據(jù)庫(kù)”(database)就是為了實(shí)現(xiàn)一定的目的按某種規(guī)則組織起來的“數(shù)據(jù)”的“集合”。下面以一個(gè)很直觀的例子來說明。每個(gè)人都有很多朋友,為了保持與他們的聯(lián)系,我們常常用一個(gè)筆記本將他們的姓名、地址、電話等信息都記錄下來,這樣要查誰(shuí)的電話或地址就很方便了。這個(gè)“通訊錄”就可以看做一個(gè)最簡(jiǎn)單的“數(shù)據(jù)庫(kù)”,每個(gè)人的姓名、地址、電話等信息就是這個(gè)數(shù)據(jù)庫(kù)中的“數(shù)據(jù)”。我們可以在筆記本這個(gè)“數(shù)據(jù)庫(kù)”中添加新朋友的個(gè)人信息,也可以由于某個(gè)朋友的電話變動(dòng)而修改他的電話號(hào)碼的“數(shù)據(jù)”。在計(jì)算機(jī)系統(tǒng)中,構(gòu)成數(shù)據(jù)庫(kù)的數(shù)據(jù),并不是記錄在某個(gè)通訊錄之類的存儲(chǔ)上,而是作為一個(gè)數(shù)據(jù)集合,被電子化存儲(chǔ)在計(jì)算機(jī)的磁盤存儲(chǔ)系統(tǒng)中。這些數(shù)據(jù)集合,通常被保存為一個(gè)或多個(gè)彼此相關(guān)的磁盤文件。通常,就把這些文件形式存在的數(shù)據(jù)集合稱為數(shù)據(jù)庫(kù)。
對(duì)于一個(gè)網(wǎng)站來說,數(shù)據(jù)庫(kù)是必不可少的。在網(wǎng)站的數(shù)據(jù)庫(kù)中,記錄著網(wǎng)站的一切操作信息,包括新聞、文章、用戶名及密碼、商品信息、圖片分類等。數(shù)據(jù)庫(kù)對(duì)網(wǎng)站是至關(guān)重要的,可以說,網(wǎng)站的數(shù)據(jù)庫(kù)就好像網(wǎng)站的存儲(chǔ)器,在這個(gè)存儲(chǔ)器中,存儲(chǔ)著網(wǎng)站中的所有數(shù)據(jù)信息。一旦網(wǎng)站的數(shù)據(jù)庫(kù)遭到攻擊破壞,就會(huì)丟失網(wǎng)站新聞、文章等各種信息,可能會(huì)造成整個(gè)網(wǎng)站的崩潰!依照數(shù)據(jù)庫(kù)中的數(shù)據(jù)關(guān)系,數(shù)據(jù)庫(kù)可分為兩類:關(guān)系(型)數(shù)據(jù)庫(kù)和面向?qū)ο髷?shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)中的數(shù)據(jù)被分門別類地存放在一些結(jié)構(gòu)化的數(shù)據(jù)表(table)里,而數(shù)據(jù)表之間又往往會(huì)形成種種內(nèi)在的交叉引用關(guān)系。存在于數(shù)據(jù)表之間的這種關(guān)系(relation)的數(shù)據(jù)庫(kù)又被稱為關(guān)系(型)數(shù)據(jù)庫(kù)(Relational DataBase,RDB)。另一類數(shù)據(jù)庫(kù)被統(tǒng)稱為面向?qū)ο髷?shù)據(jù)庫(kù)(object-oriented database),主要用于存儲(chǔ)彼此沒有內(nèi)在聯(lián)系的數(shù)據(jù)對(duì)象(而不必把它們安排到數(shù)據(jù)表里去)。在各種網(wǎng)站中,面向?qū)ο蟮臄?shù)據(jù)庫(kù)產(chǎn)品使用得比較少,因此本書主要涉及到的是與各網(wǎng)站安全息息相關(guān)的關(guān)系(型)數(shù)據(jù)庫(kù)。
我們知道數(shù)據(jù)庫(kù)管理系統(tǒng)是通過SQL語(yǔ)句,執(zhí)行各種數(shù)據(jù)庫(kù)添加刪除操作及安全管理備份等功能。也就是說,數(shù)據(jù)庫(kù)是網(wǎng)站的大腦,數(shù)據(jù)庫(kù)管理系統(tǒng)就是傳導(dǎo)這些指令信號(hào)的神經(jīng)網(wǎng)絡(luò),而SQL語(yǔ)句就像是通過神經(jīng)網(wǎng)絡(luò)傳導(dǎo)到大腦的一條條神經(jīng)指令,讓大腦進(jìn)行信號(hào)分析從而執(zhí)行各種指令。而攻擊者之所以能夠?qū)W(wǎng)站進(jìn)行攻擊,正是在混入神經(jīng)網(wǎng)絡(luò)中發(fā)送了一條條的欺騙性神經(jīng)指令。