成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

安全漏洞大揭秘:手把手教你輕松防止SQL注入

安全 漏洞
SQL(結(jié)構(gòu)化查詢語言)注入是眾所周知的軟件弱點(diǎn)和安全漏洞,如果不是的話,也是最出名的漏洞之一。盡管享有盛名,但如何防止SQL注入仍然是主要漏洞之一,并且攻擊持續(xù)增長。

 SQL(結(jié)構(gòu)化查詢語言)注入是眾所周知的軟件弱點(diǎn)和安全漏洞,如果不是的話,也是最出名的漏洞之一。盡管享有盛名,但如何防止SQL注入仍然是主要漏洞之一,并且攻擊持續(xù)增長。

查找SQL注入

根據(jù)OWASP Top 10,注入漏洞(其中SQL注入是其中一種)是Web應(yīng)用程序安全性的頭號問題。SQL注入在CWE Top 25中排名第六。其他類型的安全漏洞示例包括:

  • 指令注入(CWE-77)
  • 操作系統(tǒng)命令注入(CWE-78)
  • 冬眠注射(CWE-564)
  • 表達(dá)語言注入(CWE-917)

所有這些漏洞都有一個(gè)共同的屬性。利用來自系統(tǒng)外部的數(shù)據(jù),用戶或文件輸入或任何潛在危險(xiǎn)功能來利用它們。

幸運(yùn)的是,SQL注入可以通過工具靜態(tài)和動態(tài)地檢測到。但是,您永遠(yuǎn)無法確定是否全部抓住了它們。防止SQL注入也是減少這些漏洞的頻率和影響的關(guān)鍵。結(jié)合了漏洞檢測和預(yù)防功能的成熟DevSecOps流程很可能會捕獲并阻止這些類型的漏洞進(jìn)入已發(fā)布的產(chǎn)品。

什么是SQL?

SQL是一種特定于域的語言,旨在管理關(guān)系數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫將數(shù)據(jù)顯示為行和列中的表的集合。每行都有一個(gè)提供與其他表的關(guān)系的鍵。這是表“user”的示例:

 

安全漏洞大揭秘:手把手教你輕松防止SQL注入

與CWE Top 25中常見的漏洞枚舉有關(guān)的內(nèi)存錯(cuò)誤

SQL是用于管理,查詢和處理關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的首選語言。它定義數(shù)據(jù)庫創(chuàng)建中的表和關(guān)系。對于大多數(shù)日常使用,開發(fā)人員將SQL用于“CRUD”—創(chuàng)建、讀取、更新和刪除數(shù)據(jù)。

為什么SQL可利用?

通用編程語言不包括對SQL的支持。通過數(shù)據(jù)庫供應(yīng)商提供的API訪問數(shù)據(jù)庫命令。在許多情況下,SQL命令以字符串形式發(fā)送,API會解釋該字符串并將其應(yīng)用于數(shù)據(jù)庫。以下是一些簡單的SQL查詢:

典型的SQL查詢采用以下形式:

 

  1. Select (something) from (somewhere) (optional condition) 

以上表為例,從姓氏為“Smith”的行中檢索電子郵件,使用以下SQL語句:

 

  1. Select email from user where lastname = ‘Smith’ 

輸出如下:

 

  1. Smith1234@mail.com 
  2. John.smith@mail.netSmith1234@mail.com 

使用Web表單(見下文)從用戶那里獲取輸入是Web應(yīng)用程序中的一種常見用例。 用戶在“名稱”字段中輸入的數(shù)據(jù),例如,用于根據(jù)收到的輸入來形成SQL查詢。 考慮以下簡單的Web表單:

 

安全漏洞大揭秘:手把手教你輕松防止SQL注入

該軟件處理表單并將值分配給變量,如下所示:

 

  1. String formName = request.getParameter(Name); 

輸入為“名稱”的字符串用于使用該用戶輸入來組合查詢:

 

  1. String myQuery = “select message from user where email = ‘” + formName +”’;” 

使用此構(gòu)造的查詢:

 

  1. Select message from user where email= ‘Smith1234@mail.com’; 

其輸出(以上表為例)如下:

 

  1. Hello 
  2. How are you 

希望很容易看到這一切都會出錯(cuò)。假定直接在字符串中使用用戶輸入,那么了解SQL語法的人可以輕松地操縱它來生成SQL查詢。考慮以下示例:

使用上面相同的表格,有人在電子郵件字段中輸入“Smith1234@mail.com”或“1” =“1”。

相同的代碼將組裝以下SQL查詢字符串:

 

  1. Select message from user where email = ‘Smith1234@mail.com’ or ‘1’=’1’; 

添加看似無害的內(nèi)容(例如“or 1=1”)會更改查詢的邏輯,并可能通過返回表中稱為“用戶”的所有行來泄漏數(shù)據(jù)。在這種情況下,向您顯示表中每個(gè)用戶的消息。嚴(yán)重的隱私問題,在某些司法管轄區(qū)或環(huán)境中也可能存在法律問題,例如GDPR,HIPAA或CCPA。

上面的查詢以以下意外輸出結(jié)束:

 

  1. Hello 
  2. Password 1234 
  3. How are youDon’t tell anyone 
  4. Wassup 

SQL注入的工作方式

SQL注入(和其他類型的注入漏洞)的基本要點(diǎn)是在SQL查詢字符串中使用來自應(yīng)用程序外部的未經(jīng)檢查的數(shù)據(jù),例如用戶輸入文本。CWE 89的描述:“SQL命令中使用的特殊元素的不適當(dāng)中和(SQL注入)”更精確地定義了以下內(nèi)容:

“在用戶可控制的輸入中沒有充分刪除或引用SQL語法的情況下,生成的SQL查詢可能導(dǎo)致這些輸入被解釋為SQL而不是普通用戶數(shù)據(jù)。這可用于更改查詢邏輯以繞過安全性檢查,或用于插入修改后端數(shù)據(jù)庫的其他語句,可能包括執(zhí)行系統(tǒng)命令。”

CWE數(shù)據(jù)庫中的相同條目(CWE 89)提供了此攻擊的另一個(gè)簡單示例。假設(shè)應(yīng)用程序代表用戶“wiley”進(jìn)行查詢,并且用戶以包含SQL指令的方式構(gòu)造輸入,例如:

 

  1. name'; DELETE FROM items; -- 

如果此應(yīng)用程序不對此輸入進(jìn)行任何有效性檢查,則會構(gòu)造如下查詢:

 

  1. SELECT * FROM items WHERE owner = 'wiley' AND itemname = 'name'
  2. DELETE FROM items; 
  3. --' 

如果此攻擊成功,它將刪除表項(xiàng)中的所有數(shù)據(jù),從而對數(shù)據(jù)庫造成破壞。任何有效的SQL命令都可能以這種方式執(zhí)行。這是寫/修改攻擊的示例,其目的是破壞數(shù)據(jù)庫或插入不需要的信息。前面的示例(“or 1=1”)是讀取攻擊,其目的是數(shù)據(jù)泄漏。

數(shù)據(jù)庫服務(wù)器的許多實(shí)現(xiàn)都接受分號作為命令分隔符,這使得這種SQL注入非常危險(xiǎn)。尾部的“–”表示文本的其余部分為注釋,從而迫使SQL解釋器忽略尾部的引號,否則將導(dǎo)致語法錯(cuò)誤。欺騙組合查詢字符串的方法有多種。有時(shí)以開發(fā)人員無法想象的方式。

防止SQL注入的緩解措施

開發(fā)人員應(yīng)實(shí)施幾種緩解措施。首先,安全立場應(yīng)考慮所有來自不受信任的應(yīng)用程序外部的數(shù)據(jù)。以下是典型的緩解策略:

  • 將準(zhǔn)備好的語句與參數(shù)化查詢一起使用。
  • 使用存儲過程。
  • 白名單輸入驗(yàn)證。
  • 轉(zhuǎn)義所有提供的輸入。

這些在OWASP速查表的SQL注入中有更詳細(xì)的描述。

測試SQL注入

一種典型的安全性方法是,在集成軟件運(yùn)行時(shí),作為常規(guī)質(zhì)量檢查操作的一部分,執(zhí)行各種類型的安全性測試。不幸的是,功能測試不會嘗試將漏洞利用插入用戶輸入字段中,因?yàn)榇蠖鄶?shù)測試人員并不認(rèn)為自己是壞演員。

除了傳統(tǒng)上他們沒有時(shí)間或方向的事實(shí)之外。手動測試注入類型漏洞也很困難,因?yàn)樗枰獓L試許多不同的輸入組合。這是開始進(jìn)行模糊測試或模糊測試的地方。它會創(chuàng)建隨機(jī),意外和無效的數(shù)據(jù)作為被測應(yīng)用程序的輸入。模糊測試是滲透測試的一部分,因?yàn)槟繕?biāo)是通過公開的界面公開安全漏洞。

滲透測試

滲透性測試(以及擴(kuò)展性的模糊測試)是有益的,因?yàn)樗梢园l(fā)現(xiàn)貫穿整個(gè)過程的安全性問題并揭示重要的安全性問題。但是,像所有動態(tài)測試一樣,它完全取決于測試,代碼和API覆蓋的數(shù)量,以完全測試所有可能的排列和組合。滲透測試取決于功能測試的完整性,通常在用戶界面級別進(jìn)行。因此,請務(wù)必通過API測試和SAST支持滲透測試,以確保您的工作透徹。

API測試

API測試通過消除對脆弱且耗時(shí)的UI測試的依賴,有助于向左移動功能和安全性測試。API層是許多應(yīng)用程序功能所駐留的地方,并且測試在此級別進(jìn)行更改時(shí)更具彈性,并且更易于自動化和維護(hù)。

API級別的滲透測試

使用諸如Parasoft SOAtest之類的工具可以進(jìn)行API級別的滲透測試以暴露SQL注入,在這些工具中,可以從現(xiàn)有功能測試中創(chuàng)建自動模糊測試,從而行使應(yīng)用程序的業(yè)務(wù)邏輯。Parasoft SOAtest與著名的滲透測試工具Burp Suite集成在一起。

使用Parasoft SOAtest執(zhí)行功能測試方案時(shí),將捕獲測試中定義的API調(diào)用以及請求和響應(yīng)流量。每次測試中的Burp Suite分析工具都會將流量數(shù)據(jù)傳遞到Burp Suite應(yīng)用程序的一個(gè)單獨(dú)的運(yùn)行實(shí)例,該實(shí)例將根據(jù)其在流量數(shù)據(jù)中觀察到的API參數(shù),使用自己的啟發(fā)式方法對API進(jìn)行滲透測試。

然后,Burp Suite分析工具將獲取Burp Suite發(fā)現(xiàn)的任何錯(cuò)誤,并將其報(bào)告為SOAtest中與訪問API的測試相關(guān)的錯(cuò)誤。Parasoft SOAtest結(jié)果將報(bào)告到Parasoft的報(bào)告和分析儀表板中。有關(guān)其他報(bào)告功能。

要了解有關(guān)此集成的更多信息,請參閱我們以前的滲透測試文章。有關(guān)Portswigger關(guān)于使用Burp進(jìn)行SQL注入的更多信息,請查看其文章。以下是與Burp集成的工作方式的表示:

 

安全漏洞大揭秘:手把手教你輕松防止SQL注入

將這種類型的滲透測試集成到您的CI/CD流程中是防御SQL注入和其他類型漏洞的重要組成部分。

滲透和模糊測試無疑是DevSecOps中的重要過程,并且至關(guān)重要。但是,這提出了問題。

  • 測試檢測到安全漏洞時(shí)會發(fā)生什么?
  • 當(dāng)軟件團(tuán)隊(duì)發(fā)現(xiàn)其大部分用戶輸入處理不安全時(shí),會發(fā)生什么?
  • 它當(dāng)然需要修復(fù),但是要付出什么代價(jià)?

在開發(fā)的后期發(fā)現(xiàn)嚴(yán)重的安全問題會導(dǎo)致嚴(yán)重的成本和延遲。預(yù)防和檢測是將安全操作進(jìn)一步轉(zhuǎn)移到更便宜且更容易修復(fù)的地方的關(guān)鍵。

將SQL注入的檢測和消除向左移動

在軟件開發(fā)中采用DevSecOps方法意味著將安全性集成到DevOps管道的各個(gè)方面。正如團(tuán)隊(duì)盡早在SDLC中推進(jìn)代碼分析和單元測試等質(zhì)量流程一樣,安全性也是如此。

如果團(tuán)隊(duì)更廣泛地采用這種方法,則SQL注入可能已成為過去。攻擊的增加意味著它尚未發(fā)生。無論如何,讓我們概述一種可以盡早防止SQL注入的方法。

與修補(bǔ)(和道歉!)已發(fā)布的應(yīng)用程序相比,查找和修復(fù)潛在的SQL注入(以及其他注入漏洞)可節(jié)省大量時(shí)間。單個(gè)重大事件可能使公司損失20萬美元或更多。小型企業(yè)發(fā)生許多事件。一次攻擊會造成嚴(yán)重的財(cái)務(wù)壓力,更不用說有關(guān)違規(guī)披露和保護(hù)個(gè)人身份信息的潛在監(jiān)管問題了。

下面概述的“檢測和阻止”方法基于將減輕SQL注入的風(fēng)險(xiǎn)轉(zhuǎn)移到開發(fā)的最早階段,并通過通過靜態(tài)代碼分析進(jìn)行檢測來增強(qiáng)此功能。

如何檢測SQL注入

檢測SQL注入依賴于靜態(tài)分析來在源代碼中找到這些類型的漏洞。檢測發(fā)生在開發(fā)人員的桌面和構(gòu)建系統(tǒng)中。它可以包括現(xiàn)有的、舊的和第三方代碼。

連續(xù)檢測安全問題可確保發(fā)現(xiàn)以下所有問題:

  • 開發(fā)人員錯(cuò)過了IDE。
  • 存在于比您的新的檢測預(yù)防方法還早的代碼中。

推薦的方法是信任但驗(yàn)證模型。安全性分析在IDE級別進(jìn)行,開發(fā)人員在該級別上根據(jù)收到的報(bào)告做出實(shí)時(shí)決策。接下來,在構(gòu)建級別進(jìn)行驗(yàn)證。理想情況下,構(gòu)建級別的目標(biāo)不是找到漏洞。這是為了驗(yàn)證系統(tǒng)是否干凈。

例如,以Parasoft的演示應(yīng)用程序Parabank為例。com.parasoft.parabank.dao.jdbc.internal中的StockDataInserter.java文件中可能存在SQL注入:

 

  1. … 
  2. final String sql = sb.toString(); 
  3. rows = (nextId - lastId) / JdbcSequenceDao.OFFSET;totalRows += rows;getJdbcTemplate().update(sql);… 

Parasoft JTest在生成時(shí)生成的報(bào)告如下:

 

安全漏洞大揭秘:手把手教你輕松防止SQL注入

 

詳細(xì)信息如下:

 

  1. Call to a dangerous method 
  2. StockDataInserter.java (96): getJdbcTemplate().update(sql); *** Tainted data: SQL 

追溯到先前發(fā)現(xiàn)源污染數(shù)據(jù)(來自應(yīng)用程序外部的未經(jīng)檢查、未經(jīng)驗(yàn)證的輸入)的位置:

 

  1. Tainting point 
  2. StockDataInserter.java (47): return getJdbcTemplate().query(SQL, new 
  3. ResultSetExtractor<List<String>>() { *** Tainted data: 
  4. getJdbcTemplate().query(SQL, new ResultSetExtractor<List<Str...return 
  5. symbols; } }) 

在與SQL注入的持續(xù)斗爭中,開發(fā)人員需要認(rèn)真對待這些警告。在SQL查詢中任何使用未經(jīng)驗(yàn)證的數(shù)據(jù)都是嚴(yán)重的風(fēng)險(xiǎn)。即使當(dāng)前的形式可能不是一個(gè)特定的警告問題,以后的重構(gòu)也可能會暴露這些漏洞。檢查查詢字符串中使用的所有數(shù)據(jù)!

實(shí)際上,開發(fā)人員應(yīng)驗(yàn)證來自應(yīng)用程序外部的任何數(shù)據(jù),以確保它們符合預(yù)期的格式和內(nèi)容。轉(zhuǎn)向“始終驗(yàn)證”的理念以及依靠安全編碼而不是安全測試的過程會大大提高應(yīng)用程序的安全性。開始加強(qiáng)代碼,以防止SQL注入首先被封裝。

何時(shí)以及如何防止SQL注入

防止SQL注入的理想時(shí)間和地點(diǎn)是開發(fā)人員在其IDE中編寫代碼時(shí)。采納安全編碼標(biāo)準(zhǔn)(例如C和C++的SEI CERT C和Java和.NET的OWASP Top 10或CWE Top 25)的團(tuán)隊(duì)都具有警告未驗(yàn)證SQL查詢輸入的準(zhǔn)則。

在新創(chuàng)建的代碼上運(yùn)行靜態(tài)分析既快速又簡單,并且很容易集成到CI/CD流程中。在現(xiàn)階段調(diào)查所有安全警告和不安全的編碼做法是一個(gè)好習(xí)慣,以防止將此代碼寫入到內(nèi)部版本中。

 

安全漏洞大揭秘:手把手教你輕松防止SQL注入

 

檢測不良編碼實(shí)踐的同等重要的部分是報(bào)告的實(shí)用性。重要的是要能夠理解靜態(tài)分析違規(guī)的根本原因,以便快速、有效地解決它們。這就是Parasoft的C/C++test,dotTEST和Jtest等商業(yè)工具的發(fā)源地。

Parasoft的自動測試工具可對警告進(jìn)行完整跟蹤,在IDE中進(jìn)行說明,并連續(xù)收集構(gòu)建信息和其他信息。這些收集的數(shù)據(jù)以及測試結(jié)果和指標(biāo)可提供對團(tuán)隊(duì)編碼標(biāo)準(zhǔn)合規(guī)性的全面了解。它還顯示了總體質(zhì)量和安全狀態(tài)。

這些報(bào)告包括風(fēng)險(xiǎn)模型,這些模型是OWASP,CERT和CWE提供的信息的一部分。這樣,開發(fā)人員可以更好地了解該工具報(bào)告的潛在漏洞的影響以及應(yīng)優(yōu)先考慮哪些漏洞。在IDE級別生成的所有數(shù)據(jù)都與上面概述的下游活動相關(guān)。

總結(jié)

臭名昭著的SQL注入漏洞繼續(xù)困擾著Web應(yīng)用程序。盡管知道它是如何工作和可以被利用的,但它仍然很普遍。有關(guān)最新示例,請參見IoT Hall of Shame。

我們提出一種預(yù)防和檢測方法來補(bǔ)充主動安全測試。這種方法可防止在寫入代碼之前盡早在SDLC中進(jìn)行SQL注入。防止在IDE上進(jìn)行SQL注入并在CI/CD管道中檢測到它們是將其路由到軟件之外的關(guān)鍵。最后,在使用滲透測試技術(shù)的測試過程中查找并修復(fù)這些錯(cuò)誤。

與SQL注入(以及其他受污染數(shù)據(jù)的利用)的斗爭仍在繼續(xù)。精明的團(tuán)隊(duì)可以在他們現(xiàn)有的工作流程中以正確的流程、工具和自動化扭轉(zhuǎn)局面。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2011-02-22 13:46:27

微軟SQL.NET

2009-04-22 09:17:19

LINQSQL基礎(chǔ)

2020-08-12 07:41:39

SQL 優(yōu)化語句

2022-05-26 07:41:24

2020-12-08 10:32:15

Python郵件tcp

2016-05-12 11:54:39

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)

2010-08-09 09:25:23

SQL Server鏡

2019-02-15 12:01:53

2009-07-19 15:02:56

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-07-27 08:16:22

搜索引擎Lucene

2022-12-07 08:42:35

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产成人精品免费视频大全最热 | 狠狠干网| 91国内精品久久 | 成人欧美一区二区三区在线观看 | 国产女人与拘做视频免费 | 国产精品无 | 91视频免费黄 | 91精品久久久久久久久久小网站 | 日韩午夜网站 | 成人高潮片免费视频欧美 | 国产精品99久久久久久久久久久久 | 午夜影晥 | 麻豆精品国产91久久久久久 | 日韩喷潮 | 精品国产欧美一区二区三区不卡 | 日韩精品一区二区三区 | 国产日韩一区二区三区 | 99国产精品99久久久久久 | 国产一区免费视频 | 免费午夜剧场 | 91久久久久久| 男人的天堂中文字幕 | 亚洲电影一区二区三区 | 久久久亚洲一区 | 久久99国产精品 | 亚洲人成一区二区三区性色 | 欧美激情精品久久久久久 | 一级大片免费 | 99久久婷婷国产综合精品电影 | 亚洲国产精品一区二区久久 | 成人免费视频网站 | 欧美三区 | 国产不卡在线观看 | av色噜噜| 性色综合 | 欧美日韩精品久久久免费观看 | 中文字幕亚洲视频 | 不卡在线视频 | 在线看91 | 亚洲国产精品美女 | 欧美乱大交xxxxx另类电影 |