摘要:希望引起大家這些安全問題的足夠重視。允許攻擊者在受害者的瀏覽器上執(zhí)行腳本,從而劫持用戶會話危害網(wǎng)站或者將用戶轉(zhuǎn)向惡意網(wǎng)站。
雖然,JavaEE 內(nèi)置了一些非常優(yōu)秀的安全機(jī)制,但是它不能全面應(yīng)對應(yīng)用程序面臨的各種威脅,尤其許多最常見的攻擊:跨站攻擊(XSS),SQL 注入,Cross-Site Request Forgery (CSRF), 與 XML eXternal Entities (XXE) 等。如果你不對系統(tǒng)做大量的安全測試、漏洞修補(bǔ)以及購買應(yīng)用級安全防護(hù)工具,應(yīng)用程序就完全暴露在這些攻擊之下。
幸運(yùn)的是,開源 Web 應(yīng)用安全組織(OWASP)已經(jīng)將這下面10個 Web 問題列為最重要的安全攻擊,詳情請參見:「Ten Most Critical Web Application Security Risks」 報告。 希望引起大家這些安全問題的足夠重視。
下面就詳細(xì)解釋一下這些最著名的安全攻擊在 JavaEE 的 Web 應(yīng)用程序和 Web 服務(wù)上是如何工作的:
1、注入攻擊在編寫程序時,任何可疑的信息輸入都可能是注入攻擊,比如 request.getParameter(), request.getCookie() 以及request.getHeader(),甚至在用戶命令行接口也存在注入風(fēng)險。如果開發(fā)人員以數(shù)據(jù)和 SQL 命令拼接的方式形成 SQL 語句就存在 SQL 注入風(fēng)險,比如: “SELECT * FROM users WHERE username=‘“ + request.getParameter(“user”) + “‘ AND password=‘“ + request.getParameter(“pass”) = “‘“; 開發(fā)者正確的寫法應(yīng)該是用 PreparedStatement 方式避免黑客有機(jī)會改變 SQL 語句的原意進(jìn)而控制數(shù)據(jù)庫。除了 SQL 注入還有很多注入攻擊的方式,包括:Command Injection, LDAP Injection, 與 Expression Language (EL) Injection,所有的這些注入都非常非常危險,在編寫接受數(shù)據(jù)的模塊時一定要非常非常小心。
2、失效的身份和回話管理JavaEE 對身份校驗和會話管理都能夠支持,但是安全方面做得很不夠,有很多種方法可以破壞。程序員不得不確保每個身份校驗都通過 SSL 安全通道,并且還要確保沒有異常發(fā)生。如果不幸暴露了一個 JSESSIONID,黑客只要掌握了該 JSESSIONID 就可以劫持會話,很多時候為了防止會話固定攻擊還不得不對 JSESSIONID 進(jìn)行混淆。使用 response.encodeURL() 將 JSESSIONID 加到 URL 里面是非常危險的,JSESSIONID 很容易被偷竊,這種行為一定要避免。
3、Cross-Site Scripting (XSS)若應(yīng)用程序收到不可信的數(shù)據(jù),在沒有進(jìn)行適當(dāng)?shù)尿炞C和轉(zhuǎn)義的情況下,就將它發(fā)送給一個網(wǎng)頁瀏覽器,就會產(chǎn)生跨站腳本攻擊(簡稱 XSS)。XSS 允許攻擊者在受害者的瀏覽器上執(zhí)行腳本,從而劫持用戶會話、危害網(wǎng)站、或者將用戶轉(zhuǎn)向惡意網(wǎng)站。
4、不安全的直接對象引用當(dāng)開發(fā)人員暴露一個對內(nèi)部實現(xiàn)對象的引用時,例如,一個文件、目錄或者數(shù)據(jù)庫密匙,就會產(chǎn)生一個不安全的直接對象引用。在沒有訪問控制檢測或其他保護(hù)時,攻擊者會操控這些引用去訪問未授權(quán)數(shù)據(jù)。
5、安全配置錯誤現(xiàn)代 JavaEE 應(yīng)用程序和框架如 Struts,Spring 都有很多的安全配置,當(dāng)使用這些框架一定要確保這些配置是正確的。比如在開發(fā) Web 應(yīng)用程序時一定要當(dāng)心
Java 使用擴(kuò)展庫的方式實現(xiàn)加解密,Java 提供通用的接口,任何用戶,只需要簡單的配置,都可以根據(jù)接口來實現(xiàn)加密,這樣的好處是擴(kuò)展性很強(qiáng),弊端是如何正確使用密碼庫是非常不容易事情:第一步,找一個基于 JCE 的頂級加密庫,提供簡單、安全的加密方法,Jasypt 與 ESAPI 就非常不錯。第二步,應(yīng)該使用強(qiáng)加密算法如:加密用 AES,哈希用 SHA256,像密碼這種敏感信息,廣哈希是不夠的,黑客可以通過 Rainbow 表來破譯,因此需使用自適應(yīng)安全算法如 bcrypt 或 PBKDF2。任何使用不當(dāng)都可能造成敏感信息泄露。
7、功能級訪問控制缺失JavaEE 同時支持聲明式和編程兩種訪問控制方式,像 Spring 等框架也支持基于注解的訪問控制,但是很多應(yīng)用程序還是選擇創(chuàng)建自己的訪問控制流程,其實這是非常危險的行為。更重要的是要確保每一個暴露出去的接口和 Web 服務(wù)要有正確的訪問控制,千萬不要想當(dāng)然的假設(shè)客戶應(yīng)該可以控制一切,這樣黑客就可以直接訪問程序了。
8、 跨站請求偽造(CSRF )每一個狀態(tài)改變,應(yīng)用程序都應(yīng)該校驗該請求是否偽造,開發(fā)者在每一個用戶會話里面放置一個隨機(jī)令牌,然后每次請求進(jìn)來都進(jìn)行校驗,否則攻擊者可能會創(chuàng)建一些包含有害標(biāo)簽,例如:IMG, SCRIPT, FRAME 或者 FORM,這些標(biāo)簽可能會指向沒有保護(hù)的應(yīng)用程序,當(dāng)受害者訪問這樣的頁面,瀏覽器就會自動產(chǎn)生一個偽造的 HTTP 請求到標(biāo)簽里指定的 URL,這個 URL 通常會包含受害者的憑證。
9、使用含有已知漏洞的組件現(xiàn)代 JavaEE 應(yīng)用程序通常會包括數(shù)百種庫,尤其像依賴管理工具問世5年來,這個數(shù)目更是爆炸式的增長。廣泛應(yīng)用的Java 庫都包含了很多已知漏洞,這些漏洞非常危險。對這些漏洞沒有其他辦法,只能等庫的提供商修復(fù)漏洞,及時更新到最新版本。
10、未驗證的重定向和轉(zhuǎn)發(fā)?Web 應(yīng)用程序經(jīng)常將用戶重定向或轉(zhuǎn)發(fā)到其他網(wǎng)頁和網(wǎng)站,并且利用不可信的數(shù)據(jù)去判定目的頁面。如果沒有得到適當(dāng)驗證,攻擊者可以重定向受害用戶到釣魚軟件或惡意網(wǎng)站,或者使用轉(zhuǎn)發(fā)去訪問未授權(quán)的頁面, 在 JavaEE Web 程序里當(dāng)調(diào)用 response.sendRedirect() 在使用 request.getParameter() 或 request.getCookie() 去獲取不信任的數(shù)據(jù)時,經(jīng)常會發(fā)生這種情況。
每個 JavaEE 程序員一定會經(jīng)常遇到這十個安全問題,同時新的攻擊和漏洞不斷地被發(fā)現(xiàn),我們現(xiàn)在能做的就是在開發(fā)、測試和部署的過程中不斷地用安全代碼檢查工具對項目進(jìn)行掃描,檢查不修復(fù)漏洞。
大家可以嘗試用 Eclipse 的一些免費對比插件來檢查這些漏洞,這些不僅是靜態(tài)分析工具,C4E 是一個非常有代表意義的工具,它利用 Java Instrumentation API 去見監(jiān)控應(yīng)用中所有和安全相關(guān)的內(nèi)容。 它還可以實時分析整個數(shù)據(jù)流,在一個復(fù)雜的應(yīng)用里從請求開始跟蹤數(shù)據(jù)。 比如 JavaEE Web 應(yīng)用里常見的數(shù)據(jù)流如下:代碼從 request 取得參數(shù),用 base64 解碼,把數(shù)據(jù)存到 Map 里,再將 Map 存到一個 Bean 里面,然后將這個Bean 放到 Session 里作為 attribute,最后從 JSP 里取出,使用 EL 語言將這個 Bean 值填入頁面。Eclipse 對比工具就可以跟蹤這個數(shù)據(jù)流并報告是否存在 XSS 漏洞。這個工具非常方便,甚至對使用了非常復(fù)雜的框架和庫的應(yīng)用程序也管用,較現(xiàn)有的很多分析工具在速度,準(zhǔn)確性和易用性上都有明顯優(yōu)勢。
當(dāng)然,還有現(xiàn)在非常流行的 RASP(Runtime Aplication Security Protector),也是對付這十大安全問題的利器,它將代碼實時檢查和實時攔截相結(jié)合,將安全保護(hù)代碼和應(yīng)用程序結(jié)合在一起,像疫苗一樣使應(yīng)用程序具備自我免疫的能力。這是 Gartner 極力推薦的應(yīng)用程序安全保護(hù)方案,它使用非常方便,保護(hù)實時徹底,容易使用,不需要修改任何應(yīng)用程序代碼就可以輕松實現(xiàn)安全保護(hù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/11156.html
摘要:只要滿足規(guī)范的放入該容器,馬上就會被容器進(jìn)行高效率的管理。根據(jù)康威定律,設(shè)計系統(tǒng)的組織時,最終產(chǎn)生的設(shè)計等價于組織的溝通結(jié)構(gòu),通俗來講,團(tuán)隊的交流機(jī)制應(yīng)該與架構(gòu)分層交互機(jī)制相對應(yīng)。 本博客 貓叔的博客,轉(zhuǎn)載請申明出處 先來看看官網(wǎng)對它的定義。 Java平臺企業(yè)版(Java EE)是社區(qū)驅(qū)動的企業(yè)軟件的標(biāo)準(zhǔn)。Java EE是使用Java Community Process開發(fā)的,其中包括...
摘要:只要滿足規(guī)范的放入該容器,馬上就會被容器進(jìn)行高效率的管理。根據(jù)康威定律,設(shè)計系統(tǒng)的組織時,最終產(chǎn)生的設(shè)計等價于組織的溝通結(jié)構(gòu),通俗來講,團(tuán)隊的交流機(jī)制應(yīng)該與架構(gòu)分層交互機(jī)制相對應(yīng)。 本博客 貓叔的博客,轉(zhuǎn)載請申明出處 先來看看官網(wǎng)對它的定義。 Java平臺企業(yè)版(Java EE)是社區(qū)驅(qū)動的企業(yè)軟件的標(biāo)準(zhǔn)。Java EE是使用Java Community Process開發(fā)的,其中包括...
摘要:二十多年來,跨站腳本簡稱漏洞一直是主流網(wǎng)站的心頭之痛。大多數(shù)主流網(wǎng)站,包括谷歌,,以及,都曾受過漏洞的影響。而且,諸如運(yùn)行時應(yīng)用自我保護(hù)等網(wǎng)關(guān)安全技術(shù)也有助于檢測并防御對漏洞的攻擊。 二十多年來,跨站腳本(簡稱 XSS)漏洞一直是主流網(wǎng)站的心頭之痛。為什么過了這么久,這些網(wǎng)站還是對此類漏洞束手無策呢? 對于最近 eBay 網(wǎng)站曝出的跨站腳本漏洞,你有什么想法?為什么會出現(xiàn)這樣的漏網(wǎng)之魚...
摘要:趙涏元的最新作品惡意代碼分析與滲透測試詳細(xì)地講解了惡意代碼在各種渠道的散播方式,并針對開發(fā)者和用戶介紹如何應(yīng)對此類威脅。問您撰寫惡意代碼分析與滲透測試的初衷是什么我每次寫書的時候,最先考慮的是這個主題是否是韓國國內(nèi)已有論述的。 非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/206074 趙涏元目前在KB投資證券公...
閱讀 3639·2021-11-24 09:38
閱讀 3142·2021-11-15 11:37
閱讀 781·2021-11-12 10:36
閱讀 3547·2021-10-21 09:38
閱讀 3220·2021-09-28 09:36
閱讀 2420·2021-09-22 16:01
閱讀 4984·2021-09-22 15:09
閱讀 1210·2019-08-30 15:55