(一)SQL注入。
1.如何理解SQL注入?
SQL注入是一種將SQL代碼添加到輸入?yún)?shù)中,傳遞到SQL服務(wù)器解析并執(zhí)行的一種攻擊手法。
2.SQL注入是如何產(chǎn)生的?
web開發(fā)人員無法保證所有的輸入都已經(jīng)過濾。
攻擊者利用發(fā)送給SQL服務(wù)器的輸入數(shù)據(jù)構(gòu)造可執(zhí)行的SQL代碼
數(shù)據(jù)庫未做相應(yīng)的安全配置。
3.如何尋找SQL注入漏洞?
借助邏輯推理:
識別web應(yīng)用中所有輸入點。
了解哪些類型的請求會觸發(fā)異常。(get特殊字符‘ “)
檢測服務(wù)器響應(yīng)中的異常。
4.如何進(jìn)行SQL注入攻擊?
數(shù)字注入。
(1)select * from name where id=-1 OR 1=1; 這樣就會查詢?nèi)怼?br />字符串注入。
(1)SQL,#后面會被注釋掉的
select * from name= 'llsydn'#' and password = "123456";
(2)SQL,--后面會被注釋掉的
select * from name= 'llsydn'--' and password = "123456";
5.如何預(yù)防SQL注入?
嚴(yán)格檢查輸入變量的類型和格式。
過濾和轉(zhuǎn)義特殊字符。
利用MySQL的預(yù)編譯機制。
(二)MySQL隔離級別
1.MySQL事務(wù)隔離級別。
SERIALIZABLE; REPEATABLE READ; READ COMITTED; READ UNCOMMITTED
序列化; 可重復(fù)讀; 提交讀; 未提交讀
(1)serializable,最高級別,當(dāng)別操作未提交時,不能操作數(shù)據(jù)庫。
(2)repeatable read,可重復(fù)讀。(默認(rèn)的隔離級別)
出現(xiàn)幻讀的情況,A事務(wù)插入數(shù)據(jù)insert,并提交commit。B事務(wù)查詢select,并更新update數(shù)據(jù)的時候,并提交commit,B查詢會出現(xiàn)幻讀,即會顯示A事務(wù)插入的數(shù)據(jù)。
(3)read committed,提交讀。A事務(wù)更新update數(shù)據(jù),并提交commit。B事務(wù)中都可以讀取到被更新的數(shù)據(jù)。(即出現(xiàn)了不可重復(fù)讀)
(4)read uncommitted,未提交讀。A事務(wù)更新update數(shù)據(jù),未提交。B事務(wù)中都可以讀取到被更新的數(shù)據(jù)。(A事務(wù),回滾rollback了,則會出現(xiàn)臟讀)
2.MySQL性能與非事務(wù)表的表鎖定。
支持事務(wù)的數(shù)據(jù)庫在保持不同用戶彼此隔離方面要比非事務(wù)數(shù)據(jù)庫復(fù)雜,因此自然
反映在系統(tǒng)的性能上面。
在使用事務(wù)表時,提高性能的一些方法:
(1)使用小事務(wù)。
(2)選擇合適的隔離級別。
(3)保證開始事務(wù)前一切都是可行的。
(4)避免死鎖。