防范因编写代码产生的系统漏洞
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
用于互聯網服務的系統安全性是至關重要的。在過去的2018年,發生了多起用戶信息泄密事件,其中不乏著名的互聯網公司,攻擊者都是利用系統漏洞獲取用戶的賬號和密碼,從而進一步獲取用戶的信息。
什么是系統漏洞?系統漏洞是指系統存在的缺陷,攻擊者可以利用系統的這些缺陷來進入系統內部,獲取系統的控制權,竊取系統的數據。例如在我們設計的系統中,如果設計的用戶登錄密碼長度過小或復雜度過低時(密碼長度小于6位,密碼僅由數字組成),攻擊者就會在較短的時間內暴力破解用戶的登錄密碼,從而竊取用戶信息。這就是一個系統潛在的漏洞。
系統漏洞是從哪里來的呢?系統漏洞主要來自于操作系統和運行于操作系統之上的應用軟件。
操作系統就是我們常用的Windwos、Linux等系統,這些系統自身也會存在漏洞,操作系統存在的漏洞對系統安全的危害是巨大的,當攻擊者利用操作系統的漏洞進入操作系統后,他就有可能獲得系統管理員的權限,并利用系統管理員權限的身份獲得應用軟件的控制權。例如攻擊者可以利用系統管理員的身份登錄數據庫管理系統,獲得數據庫的管理權,可以任意讀寫數據庫的內容。要防范操作系統自身存在的漏洞,就需要隨時關注操作系統生成廠商發布的系統補丁信息,及時打好操作系統的補丁。
操作系統產生的系統漏洞我們是無法防護的,但我們自己設計和研發的系統是可以進行漏洞防護的。如前面的用戶登錄漏洞,我們完全可以將密碼長度設置到8位以上,要求密碼為字母和數字組合,也可以限制密碼輸錯次數,這些都是有效的漏洞防范措施。
在設計一個系統時,我們需要注意防范哪些系統漏洞呢?下面主要從技術方面說說需要防范的系統漏洞。從技術方面防范的系統漏洞主要有用戶訪問控制、SQL注入、跨站點腳本攻擊、異常錯誤處理、DoS攻擊、不安全的數據存儲、不安全的數據傳輸。
?
用戶訪問控制
用戶訪問控制包括用戶登錄、用戶訪問權限的控制。用戶登錄最好采用雙因子登錄認證,現在一般常用的雙因子登錄技術是登錄賬號密碼和驗證碼認證,驗證碼可以采用圖形驗證碼或手機驗證碼。用戶登錄系統后,應根據系統需要來限制用戶的訪問權限。例如普通用戶不能訪問后臺管理頁面等等。
?
SQL注入
SQL注入是最常見和最容易使用的一種攻擊系統的方式,它主要是在用戶提交的表單中嵌入SQL語句來攻擊系統。例如在一個用戶登錄頁面中,要求用戶輸入登錄賬號和密碼,攻擊者可能會在賬號輸入框中輸入“’or 1=1#”,密碼可以不輸入,如果后臺的表單處理代碼只是簡單拼SQL串的話,SQL代碼大致如下:
select * from user where username=‘'or 1=1#' and password=md5('')
上面的SQL語句在MySQL中會被解釋成下面的SQL語句:
select * from users where username='' or 1=1
因為在MySQL語言中,“#”是注釋符,注釋符后面的字符都會被忽略,這樣的語句執行后肯定會返回所有users表的所有記錄行數,如果我們的后臺代碼以是否返回大于零的記錄數來做登錄成功判斷的話,非法用戶在賬號輸入框中輸入“’or 1=1#”也會成功登錄系統,從而獲取用戶的信息,這就是SQL注入。
預防SQL注入的最好方法是對用戶提交的表單數據在前端進行過濾處理,在后端采用預編譯語句,它內置了對SQL注入語句的處理。如果在系統中使用Mybatis數據庫開發框架,就不需要對SQL注入進行特別處理了,因為Mybatis已經內置了對SQL注入的處理。
?
跨站點腳本攻擊
跨站點腳本攻擊主要是在用戶提交的表單中嵌入javascript語句,并通過瀏覽器攻擊系統訪問者的電腦。在提交的表單中嵌入javascript語句和SQL注入的嵌入原理是一樣的,只是攻擊方式不一樣,SQL注入是攻擊服務器的數據庫,跨站點腳本是攻擊系統訪問者的瀏覽器,瀏覽器運行攻擊者嵌入的腳本后,會獲取用戶的Cooik數據,從而獲取用戶的私密信息。例如系統可能會支持用戶之間互相發送消息,攻擊者會在發送消息的輸入框輸入攻擊腳本,然后提交給系統,如果系統沒有進行腳本過濾,就會把帶有腳本信息的內容發送給接收者,接收者在瀏覽器打開內容后,內容中的腳本就會被執行,這就是跨站點腳本攻擊。
預防跨站點腳本攻擊的最好方法是過濾用戶提交的所有表單數據,提交的表單數據中不允許含有javascript代碼。
?
異常錯誤處理
系統發生異常錯誤時,一般會對系統使用者給出錯誤發生原因,如果給出的錯誤發生原因包含系統信息的話,就有可能被攻擊者分析出系統的關鍵信息,從而找到系統的漏洞。
預防異常錯誤處理的方法是在提示錯誤信息時,盡量不要包含系統信息。
?
DoS攻擊
用圍毆服務器來形容DoS攻擊的危害性是最合適不過的,發起DoS攻擊的目的就是要癱瘓服務器。攻擊者會利用工具軟件不斷模擬系統訪問請求,導致系統耗盡網絡資源而不能正常響應用戶的請求。
預防DoS攻擊需要硬件、網絡環境、系統多方支持。我們在系統方面做的預防工作就是在WEB服務器中設置每分鐘連接最大請求數,用于限制DoS的攻擊次數,當然這也限制了正常用戶的訪問數量。
?
數據存儲和數據傳輸的安全性
數據存儲和數據傳輸的安全性也是非常重要的,重要的系統信息不能用明文存儲,必須要加密存儲。傳輸重要數據時,也需要加密后再傳輸,建議使用HTTPS協議。
在設計系統時,上面提到的由于代碼疏忽產生的漏洞都要有相應的設計內容體現出系統的安全性。
總結
以上是生活随笔為你收集整理的防范因编写代码产生的系统漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 搭建应用实现登陆
- 下一篇: 4月24日云栖精选夜读 | 阿里云POL