前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施


前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施

做為一個前端工程師如果想多掙點銀子就要多學點知識,網絡安全絕對的面試中必考的知識點,那麼今天我們就來一起聊下網絡安全相關的知識。

什麼樣的網站才是完全的網站?

一個安全的網站起碼需要具備以下三個要素:

  • 保密性,能夠保護用戶的數據信息不被洩露,敏感數據必須進行加密。
  • 完整性,用戶的信息必須不能夠被任意篡改,oAuth協議要求進行sign簽名,就是為了保證雙方數據的完整性。
  • 可用性,一個Web站點,各個功能點要運行正常,可被訪問,對各種可能是錯誤有預防措施。

SQL注入

SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息。

SQL注入示例


前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施

我們在這個網站上發現了一個登錄的頁面,現在我們在表單中的Username中輸入“admin'”,Password中輸入一樣的字段

前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施


點擊‘Login’登錄按鈕後,我們得到了一個報錯的頁面,根據提示“Syntax error (missing operator) in query expression 'username = 'admin'' AND password = 'admin'''.”我們可以猜測到大概的SQL語句應該是“select * from [users] where username=? and password=?”


前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施

我們返回登錄頁面在Username和Password中輸入“admin' or '1”然後再點擊登錄,我們就登錄成功了。


前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施

之所以能夠登陸成功,是因為SQL的語句變成一下的語句:

前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施


根據SQL中邏輯運算的優先級,or低於and,最後的or ‘1’永遠成立,所以該條件表達式結果為True,此語句同等於下面的這條語句

前端工程師面試必考Web網絡安全之 SQL注入示例及防範措施

SQL注入防範措施:

輸入驗證

檢查用戶輸入的合法性,儘量的限制用戶輸入特殊的符號,確信輸入的內容只包含合法的數據。數據檢查應當在客戶端和服務器端都執行之所以要執行服務器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。

錯誤消息處理

防範SQL注入,還要避免出現一些詳細的錯誤消息,因為可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。

加密處理

在一開始的CDNS例子中沒有加密的數據就直接被利用了,但是加密了就不一定會解密成功,儘量不要用一些常見的加密算法,就算用也要使用32位以上的加密算法,將用戶登錄名稱、密碼等數據加密保存。加密用戶輸入的數據,然後再將它與數據庫中保存的數據比較,這相當於對用戶輸入的數據進行了“消毒”處理,用戶輸入的數據不再對數據庫有任何特殊的意義,從而也就防止了注入SQL命令。

存儲過程來執行所有的查詢

SQL參數的傳遞方式將防止利用單引號和連字符實施注入。此外,它還使得數據庫權限可以限制到只允許特定的存儲過程執行,所有的用戶輸入必須遵從被調用的存儲過程的安全上下文,這樣就很難再發生注入式了。

總結

開發過程中工程師需要確保拼接到SQL查詢語句中的變量都要經過escape過濾函數,養成良好的編程習慣,對任何客戶端的數據來源都要保持高度的懷疑態度,只有經過過濾的數據才能放到SQL語句中進行執行,也可以藉助一些成熟的框架來幫助我們阻止SQL注入攻擊。


分享到:


相關文章: