自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

安全工程師必知:常見Java漏洞有哪些?

開發(fā) 后端
人們往往默認(rèn)代碼是安全的,漏洞或潛在的攻擊總是放到最后才考慮。大多數(shù)時(shí)候,我們腦子里想的都是sprint、 scrum、會議記錄,以及市場營銷獲得批準(zhǔn)的最新進(jìn)展。

 本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)

人們往往默認(rèn)代碼是安全的,漏洞或潛在的攻擊總是放到最后才考慮。大多數(shù)時(shí)候,我們腦子里想的都是sprint、 scrum、會議記錄,以及市場營銷獲得批準(zhǔn)的最新進(jìn)展。

在一個(gè)發(fā)展速度重于代碼安全性的世界,這是一個(gè)真實(shí)存在的問題。如果不能徹底解決入侵或黑客攻擊的問題,企業(yè)可能會損失一大筆錢。根據(jù)IBM《2020年數(shù)據(jù)泄露成本報(bào)告》,一次數(shù)據(jù)泄露的平均總成本為386萬美元。最糟糕的是,識別控制這種入侵平均需要280天。

數(shù)據(jù)是數(shù)字黃金,代碼承載著數(shù)據(jù)。雖然Java這一服務(wù)器端語言相對安全,但是黑客仍有很多方法來攻擊和訪問隱私數(shù)據(jù)。

 

安全工程師必知:常見Java漏洞有哪些?

 

以下是10個(gè)最常見的Java漏洞以及預(yù)防措施,可幫助大家盡快識別并抵御代碼中可能出現(xiàn)的漏洞。

1.代碼注入

接受輸入的應(yīng)用程序都容易受到代碼注入的攻擊。當(dāng)通過輸入傳遞的數(shù)據(jù)對程序運(yùn)行或返回?cái)?shù)據(jù)的方式造成意想不到的副作用時(shí),就會發(fā)生代碼注入。

仔細(xì)想想,表單是一個(gè)雙向的過程。輸入數(shù)據(jù)后,應(yīng)用程序處理數(shù)據(jù)并返回結(jié)果。如果結(jié)果不符合期望,就會讓應(yīng)用程序處于易受攻擊的狀態(tài)。

代碼注入經(jīng)常發(fā)生,其容易程度超出想象。2010年,一位日本開發(fā)者注意到可以將HTML作為推特發(fā)送。通過在HTML中添加一些JavaScript,他利用半夜人們熟睡的時(shí)間在Twitter上發(fā)送了一小段蠕蟲代碼。

這一小段代碼有什么用?

只要用戶將鼠標(biāo)懸浮在這段代碼上面,就會立即轉(zhuǎn)發(fā)。所以關(guān)注者滾動(dòng)鼠標(biāo),就是在轉(zhuǎn)發(fā)那段蠕蟲代碼。這在幾分鐘內(nèi)就產(chǎn)生了超過3000次轉(zhuǎn)發(fā)的連鎖效應(yīng)。

雖然Twitter不只在堆棧中使用了Java,但這一警示事件可以用于保護(hù)輸入表單。最簡單的方法是應(yīng)用帶有輸出清理和轉(zhuǎn)義的輸入驗(yàn)證。這意味著根據(jù)應(yīng)用程序正在執(zhí)行的任務(wù),任何發(fā)送HTML代碼的嘗試都會被解析或拒絕。

2.命令注入

操作系統(tǒng)命令注入(通常稱為shell注入)是一個(gè)安全漏洞,它允許攻擊者在運(yùn)行應(yīng)用程序的服務(wù)器上執(zhí)行shell命令。PHP通常是命令注入的目標(biāo),因?yàn)樗谀J(rèn)情況下調(diào)用sh/bash/cmd。然而,Java執(zhí)行已給定命令的fork()來創(chuàng)建子進(jìn)程并向其傳遞給定參數(shù)。

然而,這并不能保證代碼的安全。

應(yīng)用程序可能被分割成不同級別的遺留代碼,這些代碼組合在一起形成最終的產(chǎn)物。這些遺留產(chǎn)物可以作為shell命令注入的輸入方式。

有時(shí)可能需要向服務(wù)器發(fā)出命令行,例如發(fā)送確認(rèn)電子郵件。與其使用Runtime.exec()來訪問服務(wù)器,不如使用位于javax.mail中的可用Java API。

3.連接字符串注入

連接字符串是一組用于將應(yīng)用程序連接到數(shù)據(jù)源的術(shù)語。它可以連接到關(guān)系數(shù)據(jù)庫、LDAP目錄和文件。

對于數(shù)據(jù)庫連接字符串注入,惡意用戶需要四個(gè)參數(shù):數(shù)據(jù)源、初始目錄、用戶名和密碼。當(dāng)攻擊者使用分號作為分隔符將參數(shù)注入連接字符串以獲得訪問權(quán)限時(shí),就會發(fā)生連接字符串攻擊。

這里的問題是,一些數(shù)據(jù)庫提供商沒有限定上限,而是運(yùn)行“最后一個(gè)函數(shù)成功”的算法。這意味著攻擊者可以運(yùn)行多個(gè)連接注入字符串,用重復(fù)參數(shù)污染它們,同時(shí)數(shù)據(jù)庫進(jìn)行有效組合。因此,攻擊者最終繞過了正常的身份驗(yàn)證過程,不被強(qiáng)制退出。

例如,注入的連接字符串可以是這樣的:

 

  1. Data Source = myDataSource; Initial Catalog = db; Integrated Security = noUser ID = myUsername; Password = XXX; Intergrated Security = true; Data Source = myDataSource; Initial Catalog = db; Integrated Security = noUser ID = myUsername; Password = XXX; Intergrated Security = no

一旦進(jìn)入,惡意用戶可以劫持憑證并將其修改為他們想要的任何內(nèi)容。

4.LDAP注入

LDAP注入利用輸入驗(yàn)證并注入可執(zhí)行查詢。LDAP是輕量級目錄訪問協(xié)議,是一種開放的、跨平臺的用于目錄服務(wù)認(rèn)證的協(xié)議。LDAP是一種通信語言,應(yīng)用程序可以利用它訪問目錄服務(wù)器。這些目錄服務(wù)器通常存儲用戶名、密碼、帳戶詳細(xì)信息和其他可以與網(wǎng)絡(luò)上的其他實(shí)體共享的信息。

當(dāng)應(yīng)用程序?qū)⑽唇?jīng)處理的輸入直接插入LDAP語句時(shí),就會發(fā)生LDAP注入。在這種情況下,攻擊者可以使用LDAP篩選器語法,這種語法可以讓服務(wù)器執(zhí)行其他查詢和LDAP語句。

防止LDAP注入最簡單的方法是確保LDAP特殊字符( ) ! | & *在驗(yàn)證時(shí)被轉(zhuǎn)義或拒絕。

5.基于反射的XSS攻擊

反射XSS攻擊,或反射跨域腳本攻擊,是一個(gè)添加惡意腳本的過程,這種惡意腳本是通過鏈接激活的,其之后產(chǎn)生的指令會將用戶傳送到其他地方。例如,一個(gè)反射XSS可以嵌入到用戶評論區(qū),與網(wǎng)站的其他部分混合在一起。如果用戶點(diǎn)擊它就會跳轉(zhuǎn)到第三方網(wǎng)站,然后重新回到原來的網(wǎng)站。

而在第三方網(wǎng)站可以會出現(xiàn)cookie或會話竊取等惡意活動(dòng)。雖然監(jiān)控反射XSS很難,但垃圾郵件過濾器可以減少鏈接提交的頻率。

6.資源注入

當(dāng)攻擊者成功地更改應(yīng)用程序用于執(zhí)行惡意任務(wù)的資源標(biāo)識符時(shí),就會發(fā)生資源注入。這可能是修改端口號、修改文件名,以及獲得執(zhí)行或訪問其他資源的能力。

這是怎么發(fā)生的?通常是在應(yīng)用程序通過用戶輸入定義資源的時(shí)候。

例如,假設(shè)攻擊者通過連接字符串注入獲得了對購物站點(diǎn)的訪問權(quán)限,或者通過XSS成功竊取了用戶的詳細(xì)信息,那他們就可以使用資源注入修改或查詢詳細(xì)信息,可以在用戶不知曉的情況下,通過在站點(diǎn)訂購東西、修改或竊取更多的信息來造成破壞。

7.SQL注入

SQL注入是一個(gè)在數(shù)據(jù)請求中注入SQL的過程,這會導(dǎo)致后端應(yīng)用程序?qū)C(jī)密數(shù)據(jù)返回或在數(shù)據(jù)庫上執(zhí)行惡意腳本的內(nèi)容。

這可能導(dǎo)致死機(jī)、數(shù)據(jù)訪問和隱私侵犯。不僅如此,SQL注入還可能導(dǎo)致數(shù)據(jù)丟失或損壞,并讓用戶無法進(jìn)入自己的數(shù)據(jù)庫。這時(shí),注入已經(jīng)完全控制了數(shù)據(jù)。最簡單的解決方法是確保在服務(wù)器端進(jìn)行驗(yàn)證。前端輸入可以很容易地繞過,而后端是防止不必要的字符(如空格和引號)注入的后盾。

8.二階SQL注入

 

[[378244]]

 

二級SQL注入分兩步。首先,攻擊者向應(yīng)用程序添加了一些東西,但并不立即執(zhí)行。他們可能等待著更多的數(shù)據(jù)或等待活動(dòng)的觸發(fā)。這就是二階SQL注入不同于普通SQL注入的地方。

攻擊者向表行注入代碼,這一代碼將被視為可信源。然后調(diào)用該表行,導(dǎo)致攻擊從休眠狀態(tài)轉(zhuǎn)移到活動(dòng)執(zhí)行狀態(tài)。

測試二階SQL比較困難,因?yàn)樗ǔ:茈[蔽。

例如,惡意用戶以‘ or ‘hacker’=’hacker的用戶名注冊。這意味著‘ or ‘hacker’=’hacker存儲在數(shù)據(jù)庫中。數(shù)據(jù)庫可以使用以下查詢來驗(yàn)證用戶的身份:

 

  1. SELECT * from creditcards WHERE username = '' or 'hacker'='hacker'

因此當(dāng)用戶名是‘ or ‘hacker’=’hacker時(shí),最終的查詢是這樣的:

 

  1. SELECT * from creditcards WHERE username = '' or 'hacker'='hacker'

然后,進(jìn)入登錄時(shí),用戶名完成驗(yàn)證查詢,允許訪問其他用戶及其帳戶詳細(xì)信息。

9.存儲式XSS

當(dāng)攻擊者向網(wǎng)站或應(yīng)用程序的內(nèi)容注入腳本時(shí),就會發(fā)生存儲型跨腳本攻擊或持久性跨腳本攻擊。與嵌入第三方鏈接的反射式XSS不同,存儲式XSS更危險(xiǎn),因?yàn)樗灰笥脩艚换ァ?/p>

由于平臺的性質(zhì),社交媒體網(wǎng)站特別容易受到存儲式XSS攻擊。它會鼓勵(lì)用戶發(fā)帖和互動(dòng)。

XSS通常也被稱為網(wǎng)站蠕蟲,它最終會導(dǎo)致用戶得到侵犯性元素,并在瀏覽器上執(zhí)行。這種攻擊可以通過假冒帳戶竊取cookies、帳戶信息或其他功能。XSS可以通過四個(gè)地址觸發(fā),并通常利用JavaScript完成—@post.title, post.url, @post.id and @post.footer_attr。

為了防止這種情況發(fā)生,在解析< >和@等特殊字符之前,需進(jìn)行拒絕或轉(zhuǎn)義。

10.XPath注入

雖然JSON是數(shù)據(jù)結(jié)構(gòu)領(lǐng)域的新星,但XML文檔仍然很受歡迎并被廣泛使用。XPath是用于定義XML文檔的各個(gè)部分的語法。XPath注入背后的原理與SQL注入類似。

SQL注入和XPath之間的唯一區(qū)別是后者采用XML格式。如果攻擊者找出XML結(jié)構(gòu),就可以很容易地發(fā)送畸形數(shù)據(jù)。這讓攻擊者能夠追蹤XML文檔,獲得對用戶名和密碼等詳細(xì)信息的訪問權(quán)。

通常,當(dāng)查詢構(gòu)建在未經(jīng)驗(yàn)證的輸入上時(shí),就會發(fā)生XPath注入。防止XPath注入的技巧是使用預(yù)編譯的XPath。避免從不安全的源接收完整的表達(dá)式。如果必須對XPath進(jìn)行參數(shù)化,需將其隔離為僅字符串參數(shù),以防止查詢被劫持。

對于大多數(shù)注入,在使用用戶輸入之前進(jìn)行驗(yàn)證是防止?jié)撛诠舻淖詈唵畏椒ā0讶蝿?wù)轉(zhuǎn)移到前端是很容易的,但這只是第一道防線,并不一定能抵御住攻擊。

雖然Java可以同時(shí)作為前端和后端,但檢查用戶提供的內(nèi)容是否符合期望仍然是一種很好的做法。設(shè)置驗(yàn)證參數(shù)可能需要確定和指定允許的內(nèi)容,而不是試圖找出并刪除其他所有內(nèi)容。

 

責(zé)任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2023-12-04 11:51:12

2023-12-25 14:01:39

2023-11-29 14:59:37

2011-07-08 16:37:20

2022-04-05 13:56:48

設(shè)計(jì)模式javascript

2009-03-25 10:15:29

2009-02-09 10:03:54

2017-04-18 09:46:31

機(jī)器學(xué)習(xí)工程師算法

2009-07-16 13:28:14

2020-11-09 09:10:31

javascript設(shè)

2016-03-07 12:05:41

2019-05-15 11:14:22

監(jiān)控工具運(yùn)維

2022-05-05 11:50:58

網(wǎng)絡(luò)安全安全人才網(wǎng)絡(luò)安全崗位

2020-08-19 10:14:20

網(wǎng)絡(luò)安全工程師技術(shù)

2022-08-03 13:47:58

漏洞物聯(lián)網(wǎng)

2011-05-24 10:17:15

SEO

2015-03-04 10:03:09

2012-05-21 12:31:08

瑞星

2021-03-31 22:25:46

運(yùn)維工程師技能

2023-10-26 07:55:01

點(diǎn)贊
收藏

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