我們先了解web 程式三層架構
三層架構(3-tier architecture) 通常意義上就是將整個業務應用劃分為:
介面層(user inte***ce layer)
業務邏輯層(business logic layer)
資料訪問層(data access layer)
區分層次的目的即為了「高內聚低耦合」的思想。在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構被應用於眾多態別的軟體開發。
由資料庫驅動的web應用程式依從三層架構的思想也分為了三層:
表示層業務邏輯層(又稱領域層)
資料訪問層(又稱儲存層)
在上圖中,使用者訪問實驗樓主頁進行了如下過程:
在 web 瀏覽器中輸入 www.shiyanlou.com 連線到實驗樓伺服器。
業務邏輯層的 web 伺服器從本地儲存中載入 index.php 指令碼並解析。
指令碼連線位於資料訪問層的 dbms(資料庫管理系統),並執行 sql 語句。
資料訪問層的資料庫管理系統返回 sql 語句執行結果給 web 伺服器。
業務邏輯層的 web 伺服器將 web 頁面封裝成 html 格式傳送給表示層的 web 瀏覽器。
表示層的 web 瀏覽器解析 html 檔案,將內容展示給使用者。
在三層架構中,所有通訊都必須要經過中間層,簡單地說,三層架構是一種線性關係。
sql注入產生的分析
1)web開發人員無法保證所有的輸入都已經過濾
2)攻擊者利用傳送給sql伺服器的輸入引數構造可執行的sql**(可加入到get請求、post請求、http頭資訊、cookie中)
3)資料庫未做相應的安全配置
sql注入漏洞按照注入的物理途徑可以分成兩大類:通過web端對資料庫進行注入攻擊和直接訪問資料庫進行注入攻擊。
攻擊我們就不多說了,自己谷歌就找到很多方式了,說說總體思路:
sql注入漏洞的判斷,即尋找注入點
判斷後台資料庫型別
猜解使用者名稱和密碼。資料庫中的表和字段命名一般都是有規律的。通過構造特殊sql語句在資料庫中依次猜解出表名、欄位名、字段數、使用者名稱和密碼。
查詢web後台管理入口。web後台管理通常不對普通使用者開放,要找到後台管理的登入**,可以利用web目錄掃瞄工具(如:wwwscan、awvs)快速搜尋到可能的登入位址,然後逐一嘗試,便可以找到後台管理平台的登入**。
侵和破壞。一般後台管理具有較高許可權和較多的功能,使用前面已破譯的使用者名稱、密碼成功登入後台管理平台後,就可以任意進行破壞,比如上傳木馬、篡改網頁、修改和竊取資訊等,還可以進一步提權,入侵web伺服器和資料庫伺服器。
在入侵過程中常常會需要繞過驗證,這也是乙個點
了解如何預防sql注入,可以在發現注入攻擊bug時,對bug產生原因進行定位。
1)嚴格檢查輸入變數的型別和格式
對於整數引數,加判斷條件:不能為空、引數型別必須為數字
對於字串引數,可以使用正規表示式進行過濾:如:必須為[0-9a-za-z]範圍內的字串
2)過濾和轉義特殊字元
在username這個變數前進行轉義,對』、"、\等特殊字元進行轉義,如:php中的addslashes()函式對username引數進行轉義
3)利用mysql的預編譯機制
把sql語句的模板(變數採用佔位符進行佔位)傳送給mysql伺服器,mysql伺服器對sql語句的模板進行編譯,編譯之後根據語句的優化分析對相應的索引進行優化,在最終繫結引數時把相應的引數傳送給mysql伺服器,直接進行執行,節省了sql查詢時間,以及mysql伺服器的資源,達到一次編譯、多次執行的目的,除此之外,還可以防止sql注入。具體是怎樣防止sql注入的呢?實際上當將繫結的引數傳到mysql伺服器,mysql伺服器對引數進行編譯,即填充到相應的佔位符的過程中,做了轉義操作
簡單來說就是:
避免資料變成**被執行,時刻分清**和資料的界限。具體到sql注入來說,被執行的惡意**是通過資料庫的sql解釋引擎編譯得到的,所以只要避免使用者輸入的資料被資料庫系統編譯就可以了。
SQL注入詳解
sql 注入 sqli 是一種注入攻擊,可以執行惡意 sql 語句。它通過將任意 sql 插入資料庫查詢,使攻擊者能夠完全控制 web 應用程式後面的資料庫伺服器。攻擊者可以使用 sql 注入漏洞繞過應用程式安全措施 可以繞過網頁或 web 應用程式的身份驗證和授權,並檢索整個 sql 資料庫的內容...
sql注入詳解
什麼是sql注入?sql注入 sqli 是一種注入攻擊,可以執行惡意sql語句。它通過將任意sql 插入資料庫查詢,使攻擊者能夠完全控制web應用程式後面的資料庫伺服器。攻擊者可以使用sql注入漏洞繞過應用程式安全措施 可以繞過網頁或web應用程式的身份驗證和授權,並檢索整個sql資料庫的內容 還可...
SQL注入詳解 6
高 級 篇 第一節 利用系統表注入sqlserver 資料庫 sqlserver 是乙個功能強大的資料庫系統,與作業系統也有緊密的聯絡,這給開發者帶來了很大的方便,但另一方面,也為注入者提供了乙個跳板,我們先來看看幾個具體的例子 master.xp cmdshell net user name pa...