三種方法助您緩解SQL隱碼攻擊威脅

大雄45發表於2021-10-04
導讀 即使是大型科技公司,依然會被軟體和Web漏洞所困擾,其中SQL 注入是常見也是最危險的漏洞之一。以下是降低SQL隱碼攻擊漏洞風險的三大方法。

三種方法助您緩解SQL隱碼攻擊威脅三種方法助您緩解SQL隱碼攻擊威脅

即使是大型科技公司,依然會被軟體和Web漏洞所困擾,其中SQL 注入是常見也是最危險的漏洞之一。在MITRE近日釋出的過去兩年中最常見和最危險的25個軟體漏洞列表(見下圖)中,SQL隱碼攻擊漏洞的排名高居第六:

三種方法助您緩解SQL隱碼攻擊威脅三種方法助您緩解SQL隱碼攻擊威脅

以下是降低SQL隱碼攻擊漏洞風險的三大方法:

零信任方法

首先確保客戶端輸入驗證不是唯一的防線。這種驗證是改善使用者體驗的好工具,但它不能作為一種安全機制。因為,透過更改瀏覽器中載入的JavaScript程式碼,或使用導致SQL隱碼攻擊的引數對客戶端-伺服器架構中的後端進行基本HTTP呼叫,可以輕鬆刪除客戶端驗證。

所以開發人員應該在伺服器端進行驗證,且儘可能靠近源;開發人員還應該仔細考慮資料庫使用者許可權,所有SQL隱碼攻擊都是有害的,但有些攻擊比其他攻擊更危險:訪問使用者資訊是一回事,更改或刪除資訊是另一回事,應考慮特定應用程式是否真的有必要能夠截斷或刪除資料。

除了不允許每個應用程式自由支配一個資料庫之外,一個應用程式只有一個資料庫使用者也是不明智的。應建立多個資料庫使用者,並將其連線到特定的應用程式中進行角色分工,這可以防止攻擊者快速接管整個資料庫。

引數是最好的防禦手段

提升軟體安全性的一個關鍵方法是使用預設語句和查詢引數化。預設語句能夠限制可輸入的SQL語句:開發人員建立一個帶有佔位符的基本查詢,然後使用者給定的引數可以安全地附加到這些佔位符上。在使用預設語句和引數化查詢時,資料庫會首先根據帶有佔位符的查詢字串構建查詢執行計劃,然後將(不可信的)引數傳送到資料庫。

使用儲存過程時,引數化也很重要。就像在應用程式中建立的任何SQL查詢一樣,儲存過程也可能被惡意注入。因此,與SQL查詢一樣,開發人員應該在他們的儲存過程中引數化查詢,而不是連線引數,以防止注入。

但是,在某些情況下,預設語句不可用。比如如果某種語言不支援預設語句,或者較舊的資料庫不允許開發人員將使用者輸入作為引數提供,此時輸入驗證是一個可接受的替代方案。但團隊應該確保,輸入驗證依賴的是一個使用維護良好的庫或建立一個規則來描述所有允許的模式,例如,使用正規表示式。當然,即使預設語句可用,輸入驗證也是必須的。

多層安全和嚴格檢查

除了引數化和輸入驗證之外,開發人員還應考慮使用物件關係對映 ( ORM ) 層來防止SQL隱碼攻擊。將資料從資料庫轉換為物件,反之亦然,從而減少了顯式SQL查詢和SQL隱碼攻擊的風險。但是需要注意的是,如果使用錯誤、過時的Sequelize或Hibernate版本,ORM庫中仍然會產生漏洞,因此開發人員必須保持警惕。

最終,無論部署什麼安全策略,都必須有一個嚴格的審查系統來審查程式碼並標記所有漏洞。程式碼審查和結對程式設計確實允許這樣做,但手動審查過程總是存在誤差。為了獲得最高階別的安全性,開發人員應該尋找專門設計的掃描工具來自動檢查SQL隱碼攻擊漏洞並提醒他們程式碼中的所有弱點。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2793885/,如需轉載,請註明出處,否則將追究法律責任。

相關文章