mysql注入原理及防範

2021-08-07 18:04:38 字數 1496 閱讀 8140

sql注入原理

sql注入漏洞存在的原因,就是拼接sql引數

例:引數為id

$sql = 'select * from test where id='.$_get['id'];

正常輸入2

則sql為:select * from test where id=2;

只會查出id為2的記錄

黑客輸入2 or 1=1

則sql為select * from test where id=2 or 1=1;

這樣就會輸出test中所有的資料,就完成了一次sql注入

例:登入輸入使用者名稱username和密碼password

$username = $_post['username'];

$password = md5($_post['password']);

//拼接sql

$sql="select * from test where username='".$username."' and password='".$password."'";

正常輸入使用者名稱ceshi和密碼123456

則sql為select * from test where username='ceshi' and password='e10adc3949ba59abbe56e057f20f883e';

只會查出使用者名為ceshi和password為123456的記錄

黑客輸入使用者名稱ceshi' or 1=1 --和密碼123456

則sql為select * from test where username='ceshi' or 1=1 -- ' and password='e10adc3949ba59abbe56e057f20f883e'

這樣查詢的時候就相當於執行的sql為select * from test where username='ceshi' or 1=1,因為'--'注釋了後面的sql

這樣又完成sql注入

sql注入的防範

1,預編譯和引數化(重點)

原理:採用上述方法,會將sql語句:'select * from employees where name = ?'預先編譯好,也就是

sql引擎會預先進行語法分析,

產生語法樹,生成執行計畫

也就是說,後面輸入的引數,無論輸入什麼,

都不會影響該sql語句的語法結構了

,即後面的輸入的引數即使包含sql關鍵字(update select and or...)

也不可能當作sql命令來執行,只會被當作字元轉字面值引數,所以sql語句預編譯可以防禦sql注入

2,字串過濾

sql注入及防範

1.對使用者登入進行驗時的 sql寫成 name post name password post password query select from t user where name name and password password 可注入方式 1 萬能密碼 xx and 1 1 2 萬能使...

Xss Csrf DDOS sql注入及防範

xss攻擊是跨站指令碼工具 csrf攻擊是跨站請求偽造 sql注入 ddos流量攻擊 防止xss指令碼攻擊 xss攻擊即跨站指令碼攻擊,通過篡改網頁,注入惡意的html指令碼,控制 使用者瀏覽器進行惡意操作的一種攻擊。防止 script注入,轉義過濾script標籤。htmlentities 把字串...

MySQL 及 SQL 注入與防範方法

所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。我們永遠不要信任使用者的輸入,我們必須認定使用者輸入的資料都是不安全的,我們都需要對使用者輸入的資料進行過濾處理。1.以下例項中,輸入的使用者名稱必須為字母 數字及下劃...