SQL Injection 常見的駭客攻擊方式入門

SQL Injection 常見的駭客攻擊方式入門

SQL Injection 常見的駭客攻擊方式入門



資料來源:http://www.puritys.me/docs-blog/article-11-SQL-Injection-%E5%B8%B8%E8%A6%8B%E7%9A%84%E9%A7%AD%E5%AE%A2%E6%94%BB%E6%93%8A%E6%96%B9%E5%BC%8F.html



    SQL Injection 應該可以說是目前網路上,駭客最常用的攻擊方式,因為攻擊方式簡單,又不需要使用任何軟體,或是自行撰寫程式。


    講到 SQL,就要提到資料庫,大多數的網站都會安裝資料庫伺服器(Database),其實 Database 並不是什麼可怕的東西,Database 的功能就是將資料依序儲存下來,然後以最快的速度,找出你想要的資料,而在尋找資料之前,你必須輸入 Database 指令,你輸入的這串指令,我們就稱為 SQL 語法。


    SQL Injection 就是指 SQL 語法上的漏洞,藉由特殊字元,改變語法上的邏輯,駭客就能取得資料庫的所有內容,當然也包含了會員的帳號,密碼,



下面就舉一個SQL登入漏洞:

    一個有會員登入功能的網站,都會需要輸入帳號與密碼來進行驗證
而後端程式,如 PHP 就必需支援相關的登入檢查,判定 User 輸入的帳號、密碼是否正確,來確定登入是否成功 ,PHP 執行的 SQL 語法如下,這是一個簡單的 SQL 語法,主要功能是從 members 這個資料表中,取出符合 User 所輸入帳號與密碼的會員資料。


EX(一般寫法): SELECT * FROM members WHERE account=’$name’ AND password=’$password’

但若是駭客輸入有特殊字元的帳號:「 ‘ or 1=1 /* 」,密碼:「任意值」

這時SQL語法就會變成:


注入後的SQL: SELECT * FROM members WHERE account=” OR 1=1 /*’ AND password=”
    因為「/*」在 MySQL 語法中代表註解的意思,所以「/*」後面的字串通通沒有執行,而這句判斷式「1=1」永遠成立,駭客就能登入此網站成功。

PS.SQL 語法的註解
    SQL 註解的語法有以下三種,不同的 SQL 版本,會吃不同的語法。
    「/*」 MySQL
    「–」 MsSQL
    「#」 MySQL , # 對於 browser 來說是有意義的,那是錨點的意思,所有必須先透過 Url Encode 後的代碼 「%23」 來代替。

防護方式
    SQL Injection攻擊很簡單,不過防護也不難,只要過瀘字串「’」,即可,當然如果你的SQL語法寫得很糟,保險的做法是過瀘「’ ” 」等字串,並檢查變數型態「數字、字元、字串」

    另外會員的密碼最好是經過加密,如 md5 或 Double md5 演算法加密,這樣就能避免資料外洩時,密碼也同時外洩,還有要特別注意,md5 目前已經有破解方式,改用 mcrypt 會是更好的加密方式。


PHP 過瀘 SQL Injection 的語法:
    $name = preg_replace(“/[\’\”]+/” , ” ,$name);

另一種過瀘方式
    $str = “‘\””;
    $replace = array(“‘” => “& #39;”, “\”” => “& quot;”); //請自已把 & # , & q 中間的空白移除
$str = strtr($str, $replace);

One thought on “SQL Injection 常見的駭客攻擊方式入門

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *