亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

防止web項目中的SQL注入

 更新時間:2021年12月03日 14:07:11   作者:申不二  
這篇文章介紹了防止web項目中的SQL注入,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。需要的朋友可以收藏下,方便下次瀏覽觀看

一、SQL注入簡介

SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實現(xiàn)攻擊,而是針對程序員編寫時的疏忽,通過SQL語句,實現(xiàn)無賬號登錄,甚至篡改數(shù)據(jù)庫。

二、SQL注入攻擊的總體思路

  • 1.尋找到SQL注入的位置
  • 2.判斷服務(wù)器類型和后臺數(shù)據(jù)庫類型
  • 3.針對不同的服務(wù)器和數(shù)據(jù)庫特點進行SQL注入攻擊

三、SQL注入攻擊實例

比如在一個登錄界面,要求輸入用戶名和密碼:

可以這樣輸入實現(xiàn)免帳號登錄:

用戶名: ‘or 1 = 1 –

密 碼:

點登陸,如若沒有做特殊處理,那么這個非法用戶就很得意的登陸進去了.(當然現(xiàn)在的有些語言的數(shù)據(jù)庫API已經(jīng)處理了這些問題)

這是為什么呢? 下面我們分析一下:

從理論上說,后臺認證程序中會有如下的SQL語句:

String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";

當輸入了上面的用戶名和密碼,上面的SQL語句變成:
SELECT * FROM user_table WHERE username=
''or 1 = 1 -- and password=''

"""
分析SQL語句:
條件后面username=”or 1=1 用戶名等于 ” 或1=1 那么這個條件一定會成功;

然后后面加兩個-,這意味著注釋,它將后面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執(zhí)行,用戶輕易騙過系統(tǒng),獲取合法身份。
這還是比較溫柔的,如果是執(zhí)行
SELECT * FROM user_table WHERE
username='' ;DROP DATABASE (DB Name) --' and password=''
其后果可想而知…
"""

四、如何防御SQL注入

注意:但凡有SQL注入漏洞的程序,都是因為程序要接受來自客戶端用戶輸入的變量或URL傳遞的參數(shù),并且這個變量或參數(shù)是組成SQL語句的一部分,

對于用戶輸入的內(nèi)容或傳遞的參數(shù),我們應(yīng)該要時刻保持警惕,這是安全領(lǐng)域里的「外部數(shù)據(jù)不可信任」的原則,縱觀Web安全領(lǐng)域的各種攻擊方式,

大多數(shù)都是因為開發(fā)者違反了這個原則而導(dǎo)致的,所以自然能想到的,就是從變量的檢測、過濾、驗證下手,確保變量是開發(fā)者所預(yù)想的。

1、檢查變量數(shù)據(jù)類型和格式

如果你的SQL語句是類似where id={$id}這種形式,數(shù)據(jù)庫里所有的id都是數(shù)字,那么就應(yīng)該在SQL被執(zhí)行前,檢查確保變量id是int類型;如果是接受郵箱,那就應(yīng)該檢查并嚴格確保變量一定是郵箱的格式,其他的類型比如日期、時間等也是一個道理。總結(jié)起來:只要是有固定格式的變量,在SQL語句執(zhí)行前,應(yīng)該嚴格按照固定格式去檢查,確保變量是我們預(yù)想的格式,這樣很大程度上可以避免SQL注入攻擊。

比如,我們前面接受username參數(shù)例子中,我們的產(chǎn)品設(shè)計應(yīng)該是在用戶注冊的一開始,就有一個用戶名的規(guī)則,比如5-20個字符,只能由大小寫字母、數(shù)字以及一些安全的符號組成,不包含特殊字符。此時我們應(yīng)該有一個check_username的函數(shù)來進行統(tǒng)一的檢查。不過,仍然有很多例外情況并不能應(yīng)用到這一準則,比如文章發(fā)布系統(tǒng),評論系統(tǒng)等必須要允許用戶提交任意字符串的場景,這就需要采用過濾等其他方案了。

2、過濾特殊符號

對于無法確定固定格式的變量,一定要進行特殊符號過濾或轉(zhuǎn)義處理。

3、綁定變量,使用預(yù)編譯語句

MySQL的mysqli驅(qū)動提供了預(yù)編譯語句的支持,不同的程序語言,都分別有使用預(yù)編譯語句的方法

實際上,綁定變量使用預(yù)編譯語句是預(yù)防SQL注入的最佳方式,使用預(yù)編譯的SQL語句語義不會發(fā)生改變,在SQL語句中,變量用問號?表示,黑客即使本事再大,也無法改變SQL語句的結(jié)構(gòu)

小結(jié):

  • 1.使用預(yù)編譯綁定變量的SQL語句
  • 2.嚴格加密處理用戶的機密信息
  • 3.不要隨意開啟生產(chǎn)環(huán)境中Webserver的錯誤顯示
  • 4.使用正則表達式過濾傳入的參數(shù)
  • 5.字符串過濾
  • 6.檢查是否包函非法字符

總的來說,防范一般的SQL注入只要在代碼規(guī)范上下點功夫就能預(yù)防

以上所述是小編給大家介紹的防止web項目中的SQL注入,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Mysql空值處理函數(shù)詳解

    Mysql空值處理函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Mysql空值處理函數(shù)的相關(guān)資料,在MySQL數(shù)據(jù)庫中,空值問題是經(jīng)常遇到的一個問題,空值是指在某個字段中沒有數(shù)據(jù)或者數(shù)據(jù)為NULL,需要的朋友可以參考下
    2023-08-08
  • MySQL中的連接查詢(等值連接)

    MySQL中的連接查詢(等值連接)

    這篇文章主要介紹了MySQL中的連接查詢(等值連接),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • mysql 5.7.18 Archive壓縮版安裝教程

    mysql 5.7.18 Archive壓縮版安裝教程

    這篇文章主要為大家詳細介紹了mysql 5.7.18 Archive壓縮版安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL學(xué)習(xí)筆記小結(jié)

    MySQL學(xué)習(xí)筆記小結(jié)

    這篇文章主要介紹了MySQL學(xué)習(xí)筆記小結(jié),整體介紹了mysql的很多細節(jié)我呢體,學(xué)習(xí)優(yōu)化mysql的朋友可以參考下,需要的朋友可以參考下
    2016-05-05
  • 總結(jié)幾種MySQL中常見的排名問題

    總結(jié)幾種MySQL中常見的排名問題

    這篇文章主要總結(jié)了幾種MySQL中常見的排名問題,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-09-09
  • 給MySQL表中的字段設(shè)置默認值的兩種方法

    給MySQL表中的字段設(shè)置默認值的兩種方法

    在MySQL中,我們可以為表的字段設(shè)置默認值,以確保在插入新記錄時,如果沒有為該字段指定值,將使用默認值,要為MySQL表中的字段設(shè)置默認值,我們可以在創(chuàng)建表時或者在已存在的表上使用ALTER TABLE語句進行修改,下面將展示兩種設(shè)置默認值的方法,需要的朋友可以參考下
    2023-11-11
  • MySQL InnoDB MRR優(yōu)化指南

    MySQL InnoDB MRR優(yōu)化指南

    這篇文章主要給大家介紹了關(guān)于MySQL InnoDB MRR優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • mysql時間格式和Java時間格式的對應(yīng)方式

    mysql時間格式和Java時間格式的對應(yīng)方式

    這篇文章主要介紹了mysql時間格式和Java時間格式的對應(yīng)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 逐步分析MySQL從庫com_insert無變化的原因

    逐步分析MySQL從庫com_insert無變化的原因

    大家都知道com_insert等com_xxx參數(shù)可以用來監(jiān)控數(shù)據(jù)庫實例的訪問量,也就是我們常說的QPS。并且基于MySQL的復(fù)制原理,所有主庫執(zhí)行的操作都會在從庫重放一遍保證數(shù)據(jù)一致,那么主庫的com_insert和從庫的com_insert理論上應(yīng)該是相等的。
    2014-05-05
  • 淺談MySQL觸發(fā)器的原理以及使用

    淺談MySQL觸發(fā)器的原理以及使用

    這篇文章主要介紹了淺談MySQL觸發(fā)器的原理以及使用,觸發(fā)器的執(zhí)行不需要使用 CALL 語句來調(diào)用,也不需要手工啟動,只要一個預(yù)定義的事件發(fā)生就會被 MySQL自動調(diào)用,需要的朋友可以參考下
    2023-05-05

最新評論