一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 防止web項目中的SQL注入

防止web項目中的SQL注入

2022-01-19 17:51申不二 Mysql

這篇文章介紹了防止web項目中的SQL注入,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。需要的朋友可以收藏下,方便下次瀏覽觀看

一、SQL注入簡介

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

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

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

三、SQL注入攻擊實例

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

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

用戶名: ‘or 1 = 1 –

密 碼:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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語句的結構

小結:

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

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

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

原文鏈接:https://www.cnblogs.com/shenbuer/p/7875419.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费在线视频一区 | 国产在线精品一区二区高清不卡 | 精品免费久久久久久成人影院 | 男人躁女人过程 | 国产一及毛片 | 青青草原国产 | 88av免费观看 | 高肉h护士办公室play | 色多多幸福宝 | 国产精品久久久久影院色老大 | 掀开奶罩边躁狠狠躁软学生 | 欧美日韩免费一区二区在线观看 | 色亚洲色图 | 91肥熟国产老肥熟在线 | 99热99在线| 国产精品福利短视在线播放频 | v视界影院.vsjla | 男人狂躁女人下半身 | 日产乱码卡1卡2卡三卡四在线 | 男男gaygays国内 | 无码AV熟妇素人内射V在线 | 日韩在线视精品在亚洲 | 日本xxx在线观看免费播放 | 茄子视频懂你更多apl | 午夜一个人在线观看完整版 | 国产色在线观看 | chinese野外gay军人 | 红楼梦黄色小说 | 久久中文字幕综合不卡一二区 | 国产麻豆传媒在线观看 | 91外围| 精品日韩一区二区三区 | 果冻传媒在线视频观看免费 | 欧美久久一区二区三区 | 性色生活片在线观看 | 爱操综合网 | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 男同gay作爰视频网站 | a∨在线观看 | 我的美女奴隶 | 亚洲AV国产福利精品在现观看 |