溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java常見的漏洞有哪些

發(fā)布時(shí)間:2021-06-18 10:21:09 來源:億速云 閱讀:163 作者:chen 欄目:編程語言

這篇文章主要講解了“Java常見的漏洞有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java常見的漏洞有哪些”吧!

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

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

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

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

1.代碼注入

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

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

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

這一小段代碼有什么用?

只要用戶將鼠標(biāo)懸浮在這段代碼上面,就會(huì)立即轉(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ù)輸入表單。最簡(jiǎn)單的方法是應(yīng)用帶有輸出清理和轉(zhuǎn)義的輸入驗(yàn)證。這意味著根據(jù)應(yīng)用程序正在執(zhí)行的任務(wù),任何發(fā)送HTML代碼的嘗試都會(huì)被解析或拒絕。

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)用程序可能被分割成不同級(jí)別的遺留代碼,這些代碼組合在一起形成最終的產(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ù)庫(kù)、LDAP目錄和文件。

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

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

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

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

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

4.LDAP注入

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

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

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

5.基于反射的XSS攻擊

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

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

6.資源注入

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

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

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

7.SQL注入

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

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

8.二階SQL注入


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

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

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

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

SELECT * from creditcards WHERE username = '' or 'hacker'='hacker';

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

SELECT * from creditcards WHERE username = '' or 'hacker'='hacker';

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

9.存儲(chǔ)式XSS

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

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

XSS通常也被稱為網(wǎng)站蠕蟲,它最終會(huì)導(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文檔,獲得對(duì)用戶名和密碼等詳細(xì)信息的訪問權(quán)。

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

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

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

感謝各位的閱讀,以上就是“Java常見的漏洞有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java常見的漏洞有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI