中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

防止web項目中的SQL注入方法有哪些

發布時間:2021-12-03 15:06:19 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

這篇文章主要介紹“防止web項目中的SQL注入方法有哪些”,在日常操作中,相信很多人在防止web項目中的SQL注入方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”防止web項目中的SQL注入方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、SQL注入簡介

    SQL注入是比較常見的網絡攻擊方式之一,它不是利用操作系統的BUG來實現攻擊,而是針對程序員編寫時的疏忽,通過SQL語句,實現無賬號登錄,甚至篡改數據庫。

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

    • 1.尋找到SQL注入的位置

    • 2.判斷服務器類型和后臺數據庫類型

    • 3.針對不同的服務器和數據庫特點進行SQL注入攻擊

    三、SQL注入攻擊實例

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

    可以這樣輸入實現免帳號登錄:

    用戶名: ‘or 1 = 1 –

    密 碼:

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

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

    從理論上說,后臺認證程序中會有如下的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 那么這個條件一定會成功;
    
    然后后面加兩個-,這意味著注釋,它將后面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。
    這還是比較溫柔的,如果是執行
    SELECT * FROM user_table WHERE
    username='' ;DROP DATABASE (DB Name) --' and password=''
    其后果可想而知…
    """

    四、如何防御SQL注入

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

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

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

    1、檢查變量數據類型和格式

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

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

    2、過濾特殊符號

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

    3、綁定變量,使用預編譯語句

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

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

    到此,關于“防止web項目中的SQL注入方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    临沂市| 伊川县| 隆德县| 宜春市| 华安县| 济源市| 玉龙| 信阳市| 嘉禾县| 蓝田县| 湖北省| 香河县| 荥经县| 进贤县| 宁强县| 灵丘县| 金坛市| 宁明县| 华坪县| 武清区| 绥化市| 常德市| 宜城市| 阳山县| 廉江市| 惠州市| 治县。| 嫩江县| 朝阳区| 营山县| 大埔县| 石城县| 乌拉特中旗| 津南区| 眉山市| 郓城县| 二连浩特市| 集贤县| 柞水县| 平谷区| 永春县|