mysql防止sql注入的方法

這篇文章將為大家詳細(xì)講解有關(guān)MySQL防止sql注入的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),海南州企業(yè)網(wǎng)站建設(shè),海南州品牌網(wǎng)站建設(shè),網(wǎng)站定制,海南州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,海南州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

 SQL Injection攻擊具有很大的危害,攻擊者可以利用它讀取、修改或者刪除數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),獲取數(shù)據(jù)庫(kù)中的用戶(hù)名和密碼等敏感信息,甚至可以 獲得數(shù)據(jù)庫(kù)管理員的權(quán)限。如果能夠再利用SQLServer擴(kuò)展存儲(chǔ)過(guò)程和自定義擴(kuò)展存儲(chǔ)過(guò)程來(lái)執(zhí)行一些系統(tǒng)命令,攻擊者還可以獲得該系統(tǒng)的控制權(quán)。而且,SQL Injection 也很難防范。網(wǎng)站管理員無(wú)法通過(guò)安裝系統(tǒng)補(bǔ)丁或者進(jìn)行簡(jiǎn)單的安全配置進(jìn)行自我保護(hù),一般的防火墻也無(wú)法攔截SQL Injection 攻擊。

mysql防止sql注入的方法

mysql如何防止sql注入?

1. 普通用戶(hù)與系統(tǒng)管理員用戶(hù)的權(quán)限要有嚴(yán)格的區(qū)分。

如果一個(gè)普通用戶(hù)在使用查詢(xún)語(yǔ)句中嵌入另一個(gè)Drop Table語(yǔ)句,那么是否允許執(zhí)行呢?

由于Drop語(yǔ)句關(guān)系到數(shù)據(jù)庫(kù)的基本對(duì)象,故要操作這個(gè)語(yǔ)句用戶(hù)必須有相關(guān)的權(quán)限。在權(quán)限設(shè)計(jì)中,對(duì)于終端用戶(hù),即應(yīng)用軟件的使用者,沒(méi)有必要給他們數(shù)據(jù)庫(kù)對(duì)象的建立、刪除等權(quán)限。

那么即使在他們使用SQL語(yǔ)句中帶有嵌入式的惡意代碼,由于其用戶(hù)權(quán)限的限制,這些代碼也將無(wú)法被執(zhí)行。故應(yīng)用程序在設(shè)計(jì)的時(shí)候,

2. 強(qiáng)迫使用參數(shù)化語(yǔ)句。

如果在編寫(xiě)SQL語(yǔ)句的時(shí)候,用戶(hù)輸入的變量不是直接嵌入到SQL語(yǔ)句。而是通過(guò)參數(shù)來(lái)傳遞這個(gè)變量的話(huà),那么就可以有效的防治SQL注入式攻擊。

也就是說(shuō),用戶(hù)的輸入絕對(duì)不能夠直接被嵌入到SQL語(yǔ)句中。與此相反,用戶(hù)的輸入的內(nèi)容必須進(jìn)行過(guò)濾,或者使用參數(shù)化的語(yǔ)句來(lái)傳遞用戶(hù)輸入的變量。參數(shù)化的語(yǔ)句使用參數(shù)而不是將用戶(hù)輸入變量嵌入到SQL語(yǔ)句中。采用這種措施,

可以杜絕大部分的SQL注入式攻擊。不過(guò)可惜的是,現(xiàn)在支持參數(shù)化語(yǔ)句的數(shù)據(jù)庫(kù)引擎并不多。不過(guò)數(shù)據(jù)庫(kù)工程師在開(kāi)發(fā)產(chǎn)品的時(shí)候要盡量采用參數(shù)化語(yǔ)句。

3. 多多使用SQL Server數(shù)據(jù)庫(kù)自帶的安全參數(shù)。

為了減少注入式攻擊對(duì)于SQL Server數(shù)據(jù)庫(kù)的不良影響,在SQLServer數(shù)據(jù)庫(kù)專(zhuān)門(mén)設(shè)計(jì)了相對(duì)安全的SQL參數(shù)。在數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中,工程師要盡量采用這些參數(shù)來(lái)杜絕惡意的SQL注入式攻擊。

如在SQL Server數(shù)據(jù)庫(kù)中提供了Parameters集合。這個(gè)集合提供了類(lèi)型檢查和長(zhǎng)度驗(yàn)證的功能。如果管理員采用了Parameters這個(gè)集合的話(huà),則用戶(hù)輸入的內(nèi)容將被視為字符值而不是可執(zhí)行代碼。即使用戶(hù)輸入的內(nèi)容中含有可執(zhí)行代碼,則數(shù)據(jù)庫(kù)也會(huì)過(guò)濾掉。因?yàn)榇藭r(shí)數(shù)據(jù)庫(kù)只把它當(dāng)作普通的字符來(lái)處理。使用Parameters集合的另外一個(gè)優(yōu)點(diǎn)是可以強(qiáng)制執(zhí)行類(lèi)型和長(zhǎng)度檢查,范圍以外的值將觸發(fā)異常。

如果用戶(hù)輸入的值不符合指定的類(lèi)型與長(zhǎng)度約束,就會(huì)發(fā)生異常,并報(bào)告給管理員。如上面這個(gè)案例中,如果員工編號(hào)定義的數(shù)據(jù)類(lèi)型為字符串型,長(zhǎng)度為10個(gè)字符。而用戶(hù)輸入的內(nèi)容雖然也是字符類(lèi)型的數(shù)據(jù),但是其長(zhǎng)度達(dá)到了20個(gè)字符。則此時(shí)就會(huì)引發(fā)異常,因?yàn)橛脩?hù)輸入的內(nèi)容長(zhǎng)度超過(guò)了數(shù)據(jù)庫(kù)字段長(zhǎng)度的限制。

4. 加強(qiáng)對(duì)用戶(hù)輸入的驗(yàn)證。

總體來(lái)說(shuō),防治SQL注入式攻擊可以采用兩種方法,

一是加強(qiáng)對(duì)用戶(hù)輸入內(nèi)容的檢查與驗(yàn)證;二是強(qiáng)迫使用參數(shù)化語(yǔ)句來(lái)傳遞用戶(hù)輸入的內(nèi)容。

在SQLServer數(shù)據(jù)庫(kù)中,有比較多的用戶(hù)輸入內(nèi)容驗(yàn)證工具,可以幫助管理員來(lái)對(duì)付SQL注入式攻擊。測(cè)試字符串變量的內(nèi)容,只接受所需的值。拒絕包含二進(jìn)制數(shù)據(jù)、轉(zhuǎn)義序列和注釋字符的輸入內(nèi)容。這有助于防止腳本注入,防止某些緩沖區(qū)溢出攻擊。測(cè)試用戶(hù)輸入內(nèi)容的大小和數(shù)據(jù)類(lèi)型,強(qiáng)制執(zhí)行適當(dāng)?shù)南拗婆c轉(zhuǎn)換。這即有助于防止有意造成的緩沖區(qū)溢出,對(duì)于防治注入式攻擊有比較明顯的效果。

如可以使用存儲(chǔ)過(guò)程來(lái)驗(yàn)證用戶(hù)的輸入。利用存儲(chǔ)過(guò)程可以實(shí)現(xiàn)對(duì)用戶(hù)輸入變量的過(guò)濾,如拒絕一些特殊的符號(hào)。如以上那個(gè)惡意代碼中,只要存儲(chǔ)過(guò)程把那個(gè)分號(hào)過(guò)濾掉,那么這個(gè)惡意代碼也就沒(méi)有用武之地了。

在執(zhí)行SQL語(yǔ)句之前,可以通過(guò)數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程,來(lái)拒絕接納一些特殊的符號(hào)。在不影響數(shù)據(jù)庫(kù)應(yīng)用的前提下,應(yīng)該讓數(shù)據(jù)庫(kù)拒絕包含以下字符的輸入。如分號(hào)分隔符,它是SQL注入式攻擊的主要幫兇。如注釋分隔符。注釋只有在數(shù)據(jù)設(shè)計(jì)的時(shí)候用的到。一般用戶(hù)的查詢(xún)語(yǔ)句中沒(méi)有必要注釋的內(nèi)容,故可以直接把他拒絕掉,通常情況下這么做不會(huì)發(fā)生意外損失。把以上這些特殊符號(hào)拒絕掉,那么即使在SQL語(yǔ)句中嵌入了惡意代碼,他們也將毫無(wú)作為。

故始終通過(guò)測(cè)試類(lèi)型、長(zhǎng)度、格式和范圍來(lái)驗(yàn)證用戶(hù)輸入,過(guò)濾用戶(hù)輸入的內(nèi)容。這是防止SQL注入式攻擊的常見(jiàn)并且行之有效的措施。

5. 多層環(huán)境如何防治SQL注入式攻擊

在多層應(yīng)用環(huán)境中,用戶(hù)輸入的所有數(shù)據(jù)都應(yīng)該在驗(yàn)證之后才能被允許進(jìn)入到可信區(qū)域。

未通過(guò)驗(yàn)證過(guò)程的數(shù)據(jù)應(yīng)被數(shù)據(jù)庫(kù)拒絕,并向上一層返回一個(gè)錯(cuò)誤信息。實(shí)現(xiàn)多層驗(yàn)證。對(duì)無(wú)目的的惡意用戶(hù)采取的預(yù)防措施,對(duì)堅(jiān)定的攻擊者可能無(wú)效。

更好的做法是在用戶(hù)界面和所有跨信任邊界的后續(xù)點(diǎn)上驗(yàn)證輸入。如在客戶(hù)端應(yīng)用程序中驗(yàn)證數(shù)據(jù)可以防止簡(jiǎn)單的腳本注入。

但是,如果下一層認(rèn)為其輸入已通過(guò)驗(yàn)證,則任何可以繞過(guò)客戶(hù)端的惡意用戶(hù)就可以不受限制地訪(fǎng)問(wèn)系統(tǒng)。故對(duì)于多層應(yīng)用環(huán)境,在防止注入式攻擊的時(shí)候,需要各層一起努力,在客戶(hù)端與數(shù)據(jù)庫(kù)端都要采用相應(yīng)的措施來(lái)防治SQL語(yǔ)句的注入式攻擊。

關(guān)于mysql防止sql注入的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁(yè)題目:mysql防止sql注入的方法
轉(zhuǎn)載來(lái)于:http://muchs.cn/article44/ijoghe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、用戶(hù)體驗(yàn)服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司