SQL注入的基本原理和防禦方法

2021-09-01 22:41:56 字數 1536 閱讀 5184

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...