sql注入,這個詞相信多數程式設計師都不陌生。而且可能都對這樣的漏洞攻擊有過修補的經驗。本文主要還是寫給一些新手程式設計師看,避免自己寫的程式被黑客利用,提公升安全性。下面以php程式為例進行講解
sql注入的原理
要說原理,主要還是從php的mysql查詢語句開始。讓我們來看一下 普通的資料庫查詢語句。如下:
$sql = 「select * from `***x` where `id` = 『$id』 order by id asc」;
這是一條普通的查詢語句。為了讓程式能夠通過get 或 post方式傳參進行動態查詢,一般都會通過在sql語句中加入變數的方式進行查詢;即上面語句中的變數」$id」。
一般來說,php程式設計師都會使用$_get['']、$_request['']等方式獲取url中的傳參。這樣一來,便給了黑客可乘之機。
舉個例子,上面這條語句中如果對應的url為 www.521478.com/index.php?id=1 , 那麼程式語句實際上之行為:$sql = 「select * from `***x` where `id` = 1 order by id asc」;(確實,這樣是沒問題的)
再舉個例子,如果這條語句中對應的url為www.521478.com/index.php?id=1 and 1=1 ,那麼程式語句已經變成了 $sql = 「select * from `***x` where `id` = 1 and 1=1 order by id asc」;
到這裡,大家應該清楚黑客是如何利用sql注入漏洞進行攻擊了吧?看清了注入漏洞的工作原理,我們現在要做的就是把變數$id通過$_get['']等方式獲取來的引數字元進行過濾。
例如:我們過濾掉」and」,」=」 這樣的字元,那麼程式語句就變成了$sql = 「select * from `***x` where `id` = 1 11 order by id asc」; 黑客就無法額外增加一些sql查詢語句來進行程式設計以外的動作。
如何過濾url傳參的變數
在php程式中,我們可以使用 str_replace() 函式對字串變數的內容進行字元替換。
語法如下:str_replace(「需要替換的字段」,」替換為的字段」,」字串內容」);
套用到上面的例子中,假如我們需要過濾掉」and」我們可以這樣寫:
$id = $_get['id'];
$id=str_replace(「and」,」",$id);
這樣一來,變數id字串中的」and」被替換為空字元,可以理解為被刪除了。可能大家會問,這樣不是只替換了乙個字元嗎?sql中的執行字元好像很多啊?
沒錯,在不同的使用環境下,可能我們某乙個程式需要替換十幾個字元。所以我們需要使用陣列的方式,將字元替換封裝為乙個函式,便於我們在任何時候呼叫它。
字元替換函式
function fliter_sql($value)
這是我經常使用的過濾函式,通過它基本上可以過濾掉絕大多數的sql注入。使用的時候只需要呼叫這個函式,例如:$id = fliter_sql($_get['id']); 即可。
SYN Flood攻擊的基本原理及防禦
1.tcp中的syn flooding攻擊原理 要明白這種攻擊的基本原理,還是要從 tcp連線建立的過程開始說起。由於 tcp基於連線的,為了在服務端和客戶端之間傳送tcp資料,必須先建立乙個虛擬電路,也就是tcp連線,建立tcp連線的過程也就是我們熟悉的 三次握手 過程 首先,請求端 客戶端 傳送...
SQL查詢的基本原理
sql查詢的基本原理 兩種情況介紹。第一 單錶查詢 根據where條件過濾表中的記錄,形成中間表 這個中間表對使用者是不可見的 然後根據select的選擇列選擇相應的列進行返回最終結果。第二 兩表連線查詢 對兩表求積 笛卡爾積 並用on條件和連線連線型別進行過濾形成中間表 然後根據where條件過濾...
mysql的基本原理 Mysql 基本原理
mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...