還能再漲23%!AI寵兒NVIDIA成大摩明年首選AMD FSR 4.0將與RX 9070 XT顯卡同步登場羅永浩細紅線最新進展,暫別AR,迎來AI Jarvis構(gòu)建堅實數(shù)據(jù)地基,南京打造可信數(shù)據(jù)空間引領數(shù)字城市建設下單前先比價不花冤枉錢 同款圖書京東價低于抖音6折日媒感慨中國電動汽車/智駕遙遙領先:本田、日產(chǎn)、三菱合并也沒戲消委會吹風機品質(zhì)檢測結(jié)果揭曉 徠芬獨占鰲頭 共話新質(zhì)營銷力,2024梅花數(shù)據(jù)峰會圓滿落幕索尼影像專業(yè)服務 PRO Support 升級,成為會員至少需注冊 2 臺 α 全畫幅相機、3 支 G 大師鏡頭消息稱vivo加碼電池軍備競賽:6500mAh 旗艦機+7500mAh中端機寶馬M8雙門轎跑車明年年初將停產(chǎn),后續(xù)無2026款車型比亞迪:2025 款漢家族車型城市領航智駕功能開啟內(nèi)測雷神預告2025年首次出席CES 將發(fā)布三款不同技術原理智能眼鏡realme真我全球首發(fā)聯(lián)發(fā)科天璣 8400 耐玩戰(zhàn)神共創(chuàng)計劃iQOO Z9 Turbo長續(xù)航版手機被曝電池加大到6400mAh,搭驍龍 8s Gen 3處理器普及放緩 銷量大跌:曝保時捷將重新評估電動汽車計劃來京東參與榮耀Magic7 RSR 保時捷設計預售 享365天只換不修國補期間電視迎來換機潮,最暢銷MiniLED品牌花落誰家?美團旗下微信社群團購業(yè)務“團買買”宣布年底停運消息稱微軟正與第三方廠商洽談,試圖合作推出Xbox游戲掌機設備
  • 首頁 > 數(shù)據(jù)存儲頻道 > 數(shù)據(jù)庫頻道 > 軟件架構(gòu)

    加強Web應用程序安全:防止SQL注入

    2023年08月01日 16:03:22   來源:51CTO

      譯者 | 李睿

      數(shù)據(jù)庫在Web應用程序中存儲和組織數(shù)據(jù)時起著至關重要的作用,它是存儲用戶信息、內(nèi)容和其他應用程序數(shù)據(jù)的中央存儲庫。而數(shù)據(jù)庫實現(xiàn)了高效的數(shù)據(jù)檢索、操作和管理,使Web應用程序能夠向用戶提供動態(tài)和個性化的內(nèi)容。然而,數(shù)據(jù)庫和網(wǎng)絡應用程序之間的通信不暢可能會導致敏感數(shù)據(jù)泄露、用戶不信任、法律后果和利潤損失。本文將探討導致此類災難的后端錯誤配置,并了解如何確保應用程序的安全。

      什么是SQL注入?

      SQL注入(SQLi)是一個漏洞,它允許網(wǎng)絡攻擊者篡改Web應用程序發(fā)送給數(shù)據(jù)庫的查詢。當應用程序誤解了用戶的輸入并將其視為SQL代碼而不是字符串時,就會發(fā)生注入。因此,惡意用戶可以更改預期的查詢流,破壞應用程序的邏輯,并獲得對其資源的未經(jīng)授權的訪問。

      在大多數(shù)情況下,當開發(fā)人員需要使用依賴于用戶輸入的參數(shù)化查詢時,就會出現(xiàn)SQLi。如果開發(fā)人員在將用戶輸入插入模板之前忘記對其進行適當?shù)那謇,就會引入SQL注入漏洞。一個經(jīng)典的SQL注入示例是使用純字符串插值或連接來創(chuàng)建動態(tài)查詢,如下圖所示。網(wǎng)絡攻擊者可以通過用SQL代碼替換分頁參數(shù)中的數(shù)字來注入任意SQL語句。

      動態(tài)查詢精心制作的字符串插值

      什么是ORM注入?

      現(xiàn)在,開發(fā)人員很少使用原始SQL語句,而是使用稱為ORM的特殊框架。對象關系映射(ORM)是一種用作兩種不同范例之間的適配器的技術:關系(將數(shù)據(jù)存儲在表中)和面向?qū)ο?將數(shù)據(jù)存儲在對象中)。ORM所做的事情之一是在底層生成SQL代碼。開發(fā)人員所要做的就是告訴ORM如何去做。

      顯然,自動生成意味著自動轉(zhuǎn)義用戶提供的數(shù)據(jù)。ORM確保每個動態(tài)參數(shù)都像普通字符串一樣被處理,除非開發(fā)人員特別禁用清理功能。然而,惡意代碼的注入仍然是可能的。ORM注入是一個漏洞,它允許密切協(xié)作攻擊者強制ORM生成對他們有利的SQL。

      考慮下面的例子。這里有一個函數(shù),它應該接受帶有多個參數(shù)的對象過濾器,例如:

      復制

      {"email":, ""name": "user"}

      ORM注入

      但是,開發(fā)人員忘記檢查過濾器是否確實是一個對象,以及它是否只包含安全的過濾參數(shù)。這樣的錯誤使攻擊者能夠注入可用于恢復用戶密碼的惡意過濾器,例如:

      "password LIKE '%a%'"

      SQL注入真的很危險嗎?

      通常,SQL注入可以被認為是一個嚴重的漏洞。在大多數(shù)情況下,對網(wǎng)站任何部分的單個SQL注入最終都可以擴展到在數(shù)據(jù)庫上運行任何查詢,提取和操作其數(shù)據(jù)。由于數(shù)據(jù)庫通常保存著系統(tǒng)中最敏感的信息,因此允許網(wǎng)絡攻擊者訪問這些信息是毀滅性的。

      以下是SQL注入如何被利用的簡短列表:

      遠程代碼執(zhí)行(通常通過特殊功能)

      讀寫主機上的文件。

      顛覆Web應用程序的邏輯

      提取敏感數(shù)據(jù)

      操縱數(shù)據(jù)

      拒絕服務

      哪些類型的SQL注入是可能的?

      在通常情況下,有三種類型的SQL注入:帶內(nèi)注入、帶外注入和盲注入。反過來,帶內(nèi)攻擊可以是基于聯(lián)合的或基于錯誤的,而盲SQLi可以是基于布爾的或基于時間的。

      SQL注入層次結(jié)構(gòu)

      如果攻擊者足夠幸運,他們可以在后端響應中包含被破壞的SQL查詢的結(jié)果。這被稱為帶內(nèi)SQLi。帶內(nèi)SQLi有兩種子類型:

      1.基于聯(lián)合的SQLi:攻擊者能夠指定他們可以讀取的查詢輸出的位置(列)。

      2.基于錯誤的SQLi:當應用程序公開SQL/編程語言錯誤時,這種類型的SQLi是可能的。在這種情況下,攻擊者可以分析錯誤消息/堆棧跟蹤,并推斷攻擊是否成功。

      使用BlindSQLi,網(wǎng)絡攻擊者無法看到被破壞的SQL查詢的結(jié)果。然而,它們有某種反饋,可以幫助確定是否存在注入。盲SQLi有兩種子類型:

      1.基于布爾的SQL:攻擊者可以使用SQL條件語句以某種方式修改服務器的響應。然后,他們可以將這種新的反應與原來的反應進行比較,并確定注入是否有效。

      2.基于時間的SQLi:攻擊者可以將數(shù)據(jù)庫的SLEEP函數(shù)與條件語句結(jié)合起來,從而延遲后端響應。然后,他們可以將原始響應時間與新的響應時間進行比較,以確定注入是否成功。

      在某些情況下,攻擊者可能根本無法從數(shù)據(jù)庫獲得任何反饋。在這種情況下,它們可以強制數(shù)據(jù)庫將輸出重定向到另一個位置,并嘗試從那里讀取它。這就是所謂的帶外SQL注入。例如,他們可以強制數(shù)據(jù)庫將包含敏感信息的DNS查詢發(fā)送到他們控制的DNS服務器;蛘,它們可以強制數(shù)據(jù)庫將一些數(shù)據(jù)寫入可公開訪問的文件中。這種注入會影響許多數(shù)據(jù)庫。

      減輕SQLi時的常見錯誤

      用戶不應該試圖為SQL輸入?yún)?shù)提供自己的清理程序。這樣做需要深入了解數(shù)據(jù)庫規(guī)范和使用它們的經(jīng)驗。最有可能的是,最終會淹沒在其他人無法理解的正則表達式中,并且隨著數(shù)據(jù)庫的發(fā)展,沒有人會支持清理程序。

      需要記住:攻擊者總是試圖混淆他們的SQLi有效負載,將其偷運到WAF和IPS。有大量的框架可以利用SQLi,為攻擊者提供扭曲有效負載的腳本庫。編寫自定義混淆處理程序并將其與現(xiàn)有混淆處理程序結(jié)合使用也很容易。

      考慮一下開發(fā)人員在試圖凈化用戶輸入時所犯的一些常見錯誤。

      一個常見的誤解是,可以通過刪除/替換SQL查詢參數(shù)中的空格來避免SQLi。例如,如果攻擊者只能使用一個單詞,會造成多大的傷害?但是許多數(shù)據(jù)庫將注釋轉(zhuǎn)換為空格,因此“SELECT email FROM user”等于“SELECT/**/email/**/FROM/**/user”,這是一個單詞。

      使用注釋而不是空格的SQLMap篡改腳本

      通常認為刪除引號可以使參數(shù)安全,但有時攻擊者可以指定另一個特殊字符來定義字符串。例如,PostgreSQL允許定義包含在雙美元符號中的多行字符串。所以“email”等于$$ email$$。

      SQLMap篡改腳本,使用雙美元符號代替單引號

      最后但并非最不常見的錯誤是對數(shù)據(jù)庫關鍵字進行非遞歸刪除。這也很容易繞過檢測,因為攻擊者可以在相同的關鍵字中間插入關鍵字。因此,經(jīng)過清理之后,注入仍然存在。例如:

      “SELSELECTECT” -> “SELECT”

      用于嵌套關鍵字的SQLMap篡改腳本

      防止SQL注入的正確方法

      防止SQLi的第一步是使用預處理語句。允許用戶定義預處理語句也是不可接受的。這里有一個使用TypeORM防止SQL注入的例子:采用硬編碼的模板,并使用這個框架的特性來安全地插入變量:

      使用TypeORM編寫語句

      但是僅僅使用ORM是不夠的。正如前面看到的,業(yè)務邏輯缺陷可以允許繞過安全保護措施。SQLi修正的第二步是顯式驗證用戶輸入。如果需要一個數(shù)字,可以手動將值轉(zhuǎn)換為數(shù)字。如果需要URL,可以手動將輸入字符串轉(zhuǎn)換為URL。這種方法顯著降低了利用SQLi的可能性。額外的好處是,將擁有更一致的數(shù)據(jù)和更少的錯誤。有許多庫可用于聲明性驗證,例如express-validator或class-validator。

      另一件需要記住的重要事情是始終為每個應用程序創(chuàng)建一個專用的數(shù)據(jù)庫用戶。仔細閱讀有關默認用戶權限的文檔,并禁用除了對應用程序運行至關重要的功能之外的所有功能。除了數(shù)據(jù)庫管理之外,永遠不應該將DBA帳戶用于其他任何事情。默認情況下,DBA帳戶被授予所有可能的權限。這顯著地放大了SQL注入的嚴重性。

      最后但同樣重要的是,使用Web應用程序防火墻或入侵預防系統(tǒng)。它們能夠發(fā)現(xiàn)并破壞SQL注入攻擊,甚至有一組流量規(guī)則來檢測依賴SQLi的已知漏洞。當然,使用WAF或IPS并不是靈丹妙藥,因為它們可以繞過檢測。然而,這種工具的存在顯著提高了進行攻擊所需的知識閾值。另外,WAF/IPS干擾了SQLi開發(fā)自動化,并提供了比傳統(tǒng)工具更好的日志記錄。

      原文標題:Strengthening Your Web App Security: Preventing SQL Injections,作者:Conty Write

      文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請謹慎對待。投資者據(jù)此操作,風險自擔。

    即時

    新聞

    明火炊具市場:三季度健康屬性貫穿全類目

    奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。

    企業(yè)IT

    重慶創(chuàng)新公積金應用,“區(qū)塊鏈+政務服務”顯成效

    “以前都要去窗口辦,一套流程下來都要半個月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關材料,僅幾秒鐘,重慶市民曾某的賬戶就打進了21600元。

    3C消費

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,高能實力,創(chuàng)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實質(zhì)性的幫助,雙十一期間低至2799元,性價比很高,簡直是創(chuàng)作者們的首選。

    研究

    中國信通院羅松:深度解讀《工業(yè)互聯(lián)網(wǎng)標識解析體系

    9月14日,2024全球工業(yè)互聯(lián)網(wǎng)大會——工業(yè)互聯(lián)網(wǎng)標識解析專題論壇在沈陽成功舉辦。