




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1. 范圍本規(guī)范從WEB應(yīng)用開發(fā)安全管理要求出發(fā),給出了WEB編碼安全的具體要求。本規(guī)范明確定義了JAVA應(yīng)用開發(fā)中和WEB編碼安全相關(guān)的技術(shù)細(xì)節(jié)。與JAVA編碼安全相關(guān)的內(nèi)容包括:跨站腳本攻擊及解決方法、SQL注入及解決方法、惡意文件執(zhí)行及解決方法、不安全的直接對象引用及解決方法、跨站請求偽造及解決方法、信息泄露和錯誤處理不當(dāng)及解決方法、殘缺的認(rèn)證和會話管理及解決方法、不安全的加密存儲及解決方法、不安全的通信及解決方法、限制URL訪問實效解決方法等。2. 1.規(guī)范概述Web應(yīng)用程序為架構(gòu)設(shè)計人員、開發(fā)人員、測試人員和運維運營人員提出一系列復(fù)雜的安全問題,最安全、最有能力抵御攻擊的Web應(yīng)用程
2、序是那些應(yīng)用安全思想構(gòu)建的應(yīng)用程序。在設(shè)計初始階段,應(yīng)該使用可靠的體系結(jié)構(gòu)和設(shè)計方法,同時要結(jié)合考慮程序部署以及企業(yè)的安全策略。如果不能做到這一點,將導(dǎo)致在現(xiàn)有基礎(chǔ)結(jié)構(gòu)上部署應(yīng)用程序時,要不可避免地危及安全性。本規(guī)范提供一系列安全的體系結(jié)構(gòu)和設(shè)計指南,并按照常見的應(yīng)用程序漏洞類別進(jìn)行組織。這些指南是Web應(yīng)用程序安全的重要方面,并且是經(jīng)常發(fā)生錯誤的領(lǐng)域。2.實現(xiàn)目標(biāo)使用本規(guī)范可以實現(xiàn):1. 確定安全Web應(yīng)用程序的重要體系結(jié)構(gòu)和設(shè)計問題。2. 設(shè)計時考慮重要部署問題。3. 制定能增強Web應(yīng)用程序輸入驗證的策略。4. 設(shè)計安全的身份驗證和會話管理機制。5. 選擇適當(dāng)?shù)氖跈?quán)模型。6. 實現(xiàn)有效的
3、帳戶管理方法,并保護(hù)用戶會話。7. 對隱私認(rèn)可并防止篡改,和對身份驗證信息進(jìn)行加密。8. 防止參數(shù)操作。9. 安全漏洞checklist。10. 設(shè)計審核和記錄策略。3.安全編碼原則1. 程序只實現(xiàn)你指定的功能。2. 永不要信任用戶輸入,對用戶輸入數(shù)據(jù)做有效性檢查。3. 必須考慮意外情況并進(jìn)行處理。4. 不要試圖在發(fā)現(xiàn)錯誤之后繼續(xù)執(zhí)行。5. 盡可能使用安全函數(shù)進(jìn)行編程。6. 小心、認(rèn)真、細(xì)致地編程。4.安全背景知識本規(guī)范主要提供設(shè)計應(yīng)用程序時應(yīng)該遵循的一些指南和原則。為充分理解本規(guī)范內(nèi)容,請:了解應(yīng)用程序?qū)艿降耐{,以確保通過程序設(shè)計解決這些問題。了解需要考慮的威脅,在程序設(shè)計階段應(yīng)該考慮
4、到這些威脅。在應(yīng)用程序易受攻擊的重要環(huán)節(jié)應(yīng)用系統(tǒng)的方法。將重點放在程序部署、輸入驗證、身份驗證和授權(quán)、加密及數(shù)據(jù)敏感度、配置、會話、異常管理以及適當(dāng)?shù)膶徍撕陀涗洸呗陨?,以確保應(yīng)用程序具有健壯性。5.JAVA安全編程OWASP TOP10 AND ESAPI5.1 OWASP TOP 10 與ESAPIOWASP(開放Web應(yīng)用安全項目-OpenWebApplicationSecurityProject)是一個開放社群、非營利性組織,目前全球有82個分會近萬名會員,其主要目是研議協(xié)助解決Web軟體安全之準(zhǔn)則、工具與技術(shù),長期致力于協(xié)助政府或企業(yè)并改善網(wǎng)頁應(yīng)用程式與網(wǎng)頁服務(wù)的安全性。OWASP T
5、OP 10是10個最關(guān)鍵的Web應(yīng)用安全問題清單。這份名單是每隔數(shù)年更新(最近2013年)。Top 10項目的目標(biāo)是通過找出企業(yè)組織所面臨的最嚴(yán)重的風(fēng)險來高人們對應(yīng)用程序安全的關(guān)注度。Top 10項目被眾多標(biāo)準(zhǔn)、書籍、工具和相關(guān)組織引用,包括 MITRE、PCI DSS、DISA、 FTC等等。此版本的 OWASP Top 10標(biāo)記了該項目這十年來對于應(yīng)用程序安全風(fēng)險重要性認(rèn)知的推廣。OWASP Top 10最初于2003 年發(fā)布,并于2004年和2007年相繼做了少許的修改更新。2010年版做了修改以對風(fēng)險進(jìn)行排序,而不僅僅僅限于流行程度。本次發(fā)布的2013年版也沿用了該
6、方法。名單上都是那些通常很簡單的,危險的安全問題。這里是一個以在OWASP十大項目的鏈接。/index.php/Category:OWASP_Top_Ten_Project其實簡單一點來說,ESAPI就是為編寫出更加安全的代碼設(shè)計出來的一些API,方便使用者調(diào)用,從而方便的編寫安全的代碼。它本身是開源的,同時提供JAVA版本和.NET版本。代碼下載地址:下圖顯示提供的API與OWASP列出的10個安全問題的蓋關(guān)系:下圖顯示結(jié)合ESAPI設(shè)計你的程序:下圖簡單呈現(xiàn)ESAPI如何運作:5.2 跨站腳本(XSS)5.2.1定義當(dāng)應(yīng)用程序收到含有不可信的數(shù)據(jù),在沒
7、有進(jìn)行適當(dāng)?shù)尿炞C和轉(zhuǎn)義的情況下,就將它發(fā)送給一個網(wǎng)頁瀏覽器,這就會產(chǎn)生跨站腳本攻擊(簡稱XSS)。XSS允許攻擊者在受害者的瀏覽器上執(zhí)行腳本,從而劫持用戶會話、危害網(wǎng)站、或者將用戶轉(zhuǎn)向至惡意網(wǎng)站。5.2.2危害攻擊者能在受害者瀏覽器中執(zhí)行腳本以劫持用戶會話、迫害網(wǎng)站、插入惡意內(nèi)容、重定向用戶、使用惡意軟件劫持用戶瀏覽器等等。5.2.3種類已知有三種著名跨站漏洞:1)存儲式;2)反射式;3)基于DOM。反射式跨站腳本通過測試或代碼分析很容易找到。5.2.4解決方法.驗證輸入驗證輸入很簡單-檢查每個輸入的有效性。這可能意味著很多東西,但在典型的和簡單的情況下,這意味著檢查輸入類型和數(shù)
8、據(jù)的長度。例如,如果你是從一個文本框接受一個準(zhǔn)的郵政編碼,你會知道,唯一有效的類型是一個數(shù)字(0-9),而長度應(yīng)該是6,不能多也不能少。并非所有的案件都如此簡單,但很多是相似的。下圖顯示驗證輸入的架構(gòu)。這里的關(guān)鍵是,一切都進(jìn)行驗證,所有的輸入,這并不來自于應(yīng)用程序(包括用戶輸入,請求頭,Cookie,數(shù)據(jù)庫數(shù)據(jù).)。u 實例getValidInput(java.lang.Stringcontext,java.lang.Stringinput,java.lang.Stringtype,intmaxLength,boolean allowNull,ValidationErrorListerrors
9、)isValidInput(java.lang.Stringcontext,java.lang.Stringinput,java.lang.Stringtype,intmaxLength,boolean allowNull)StringvalidatedFirstName=ESAPI.validator().getValidInput("FirstName",myForm.getFirstName(),"FirstNameRegex",255,false,errorList);boolean isValidFirstName=ESAPI.validato
10、r().isValidInput("FirstName",myForm.getFirstName(),"FirstNameRegex",255,false);.編碼輸出對驗證輸入的另一面就是編碼輸出。編碼輸出,是用來確保字符被視為數(shù)據(jù),而不是作為HTML元字符被瀏覽器解析。這些技術(shù)定義一些特殊的"轉(zhuǎn)義"字符。沒有正確轉(zhuǎn)義的數(shù)據(jù)它仍然會在瀏覽器中正確解析。編碼輸出只是讓瀏覽器知道數(shù)據(jù)是不是要被解析,達(dá)到攻擊無法實現(xiàn)的目的。需要編碼的部分:1、HTML實體2、HTML屬性3、Javascript4、CSS5、URL下圖像顯示
11、編碼輸出的架構(gòu)。u 實例1HTML實體編碼/performinginputvalidationStringcleanComment=ESAPI.validator().getValidInput("comment",request.getParameter("comment"),"CommentRegex",300,false,errorList);/checktheerrorListhere./performingoutputencodingfortheHTMLcontextStringsafeOutput=ESAPI.encode
12、r().encodeForHTML(cleanComment);u 實例2URL編碼/performinginputvalidationStringcleanUserName=ESAPI.validator().getValidInput("userName",request.getParameter("userName"),"userNameRegex",50,false,errorList);/checktheerrorListhere./performingoutputencodingfortheurlcontextString
13、safeOutput="/admin/findUser.do?name="+ESAPI.encoder().encodeForURL(cleanUserName);5.3 SQL注入5.3.1定義注入攻擊漏洞,例如SQL、OS以及LDAP注入。這些攻擊發(fā)生在當(dāng)不可信的數(shù)據(jù)作為命令或者查詢語句的一部分,被發(fā)送給解釋器的時候。攻擊者發(fā)送的惡意數(shù)據(jù)可以欺騙解釋器,以執(zhí)行計劃外的命令或者在未被恰當(dāng)授權(quán)時訪問數(shù)據(jù)。簡單來說,注入往往是應(yīng)用程序缺少對輸入進(jìn)行安全性檢查所引起的,攻擊者把一些包含指令的數(shù)據(jù)發(fā)送給解釋器,解釋器會把收到的數(shù)據(jù)轉(zhuǎn)換成指令執(zhí)行,注入漏洞十分普遍,通常能在SQL查
14、詢、LDAP查詢、Xpath查詢、OS命令、程序參數(shù)等中出現(xiàn)。5.3.2危害注入能導(dǎo)致數(shù)據(jù)丟失或數(shù)據(jù)破壞、缺乏可審計性或是拒絕服務(wù)。注入漏洞有時甚至能導(dǎo)致完全接管主機。5.3.3種類SQL注入、XPATH注入、LDAP注入、OS命令注入等。5.3.4解決方法.SQL注入實例String sqlString="SELECT * FROM users WHERE fullname='"+form.getFullName()+"'AND password='"+form.getPassword()+"'&
15、quot;正常:username=tony,password=123456SELECT * FROM users WHERE username=tony' AND password='123456'攻擊:username=tony,password='OR'1'='1SELECT * FROM users WHERE username=tony'ANDpassword='' OR '1'='1'.參數(shù)化查詢預(yù)處理使用PreparedStatement()綁定變量下面的代
16、碼示例使用一個PreparedStatement,Java的一個參數(shù)化查詢的執(zhí)行情況,執(zhí)行相同的數(shù)據(jù)庫查詢。String custname=request.getParameter("customerName");/ThisshouldREALLYbevalidatedtoo/performinputvalidationtodetectattacksString query="SELECT account_balance FROM user_dataWHERE user_name=?"PreparedStatementpstmt=connection.p
17、repareStatement(query);pstmt.setString(1,custname);ResultSetresults=pstmt.executeQuery();.使用存儲過程String custname=request.getParameter("customerName");/ThisshouldREALLYbevalidatedtryCallableStatementcs=connection.prepareCall("callsp_getAccountBalance(?)");cs.setString(1,cust
18、name);ResultSetresults=cs.executeQuery();/¼resultsethandlingcatch(SQLExceptionse)/¼logginganderrorhandling.使用ESAPI/ESAPIversionofqueryCodecORACLE_CODEC=newOracleCodec();/we'reusingoracleStringquery="SELECTnameFROMusersWHEREid="+ESAPI.encoder().encodeForSQL(ORACLE_CODEC
19、,validatedUserId)+"AND date_created>='"+ESAPI.encoder().encodeForSQL(ORACLE_CODEC,validatedStartDate)+"'"myStmt=conn.createStatement(query);./executestatementandgetresults5.4惡意文件執(zhí)行5.4.1定義惡意文件執(zhí)行是一種能夠威脅任何網(wǎng)站形式的漏洞,只要攻擊者在具有引入(include)功能程式的參數(shù)中修改參數(shù)內(nèi)容,WEB服務(wù)器便會引入惡意程序內(nèi)容從而受到惡意文件執(zhí)
20、行漏洞攻擊。5.4.2危害攻擊者可利用惡意文件執(zhí)行漏洞進(jìn)行攻擊取得WEB服務(wù)器控制權(quán),進(jìn)行不法利益或獲取經(jīng)濟(jì)利益。5.4.3解決方法實例1驗證輸入,使用ESAPI驗證上傳文件名if(!ESAPI.validator().isValidFileName("upload",filename,allowedExtensions,false)throw new Validation UploadException("Upload only simple filenames withthefollowingextensions"+allowedExt
21、ensions,"Upload failedisValidFileName check");實例2使用ESAPI檢查上傳文件大小ServletFileUpload upload=newServletFileUpload(factory);upload.setSizeMax(maxBytes);5.5不安全的直接對象引用5.5.1定義當(dāng)開發(fā)人員暴露一個對內(nèi)部實現(xiàn)對象的引用時,例如,一個文件、目錄或者數(shù)據(jù)庫密匙,就會產(chǎn)生一個不安全的直接對象引用。在沒有訪問控制檢測或其他保護(hù)時,攻擊者會操控這些引用去訪問未授權(quán)數(shù)據(jù)。所謂"不安全的對象直接引用",
22、即Insecure direct objectreferences,意指一個已經(jīng)授權(quán)的用戶,通過更改訪問時的一個參數(shù),從而訪問到原本其并沒有得到授權(quán)的對象。Web應(yīng)用往往在生成Web頁面時會用它的真實名字,且并不會對所有的目對象訪問時來檢查用戶權(quán)限,所以這就造成不安全的對象直接引用的漏洞。我們看如下的一個示例,也許這樣就更容易理解什么是不安全的對象直接引用。Ø 攻擊者發(fā)現(xiàn)他自己的參數(shù)是6065,即?acct=6065;Ø 他可以直接更改參數(shù)為6066,即?acct=6066;Ø 這樣他就可以直接看到6066用戶的賬戶信息。5.5.2危害這種漏洞能損害參數(shù)所引用的所
23、有數(shù)據(jù)。除非名字空間很稀疏,否則攻擊者很容易訪問該類型的所有數(shù)據(jù)。5.5.3解決方法.案例1使用ESAPI的AccessReferenceMap實現(xiàn)使用非直接的對象引用MyObjectobj;/generateyourobjectCollectioncoll;/holdsobjectsfordisplayinUI/create ESAPI random access reference mapAccessReferenceMap map=newRandomAccessReferenceMap();/get indirect reference using direct refer
24、ence as seed inputString indirectReference=map.addDirectReference(obj.getId();/set indirect reference for each object-requires your app object to have this methodbj.setIndirectReference(indirectReference);/add object to display collectioncoll.add(obj);/store collection in request/session and forward
25、 to UI..案例2檢查訪問。來自不受信源所使用的所有直接對象引用都必須包含訪問控制檢測,這樣才能確保用戶對要求的對象有訪問權(quán)限5.6跨站請求偽造(CSRF)5.6.1.定義跨站請求偽造,也被稱成為"oneclickattack"或者sessionriding,通常縮寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左。XSS利用站點內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進(jìn)行防范的資源也相當(dāng)稀少)和難
26、以防范,所以被認(rèn)為比XSS更具危險性。一個跨站請求偽造攻擊迫使登錄用戶的瀏覽器將偽造的HTTP請求,包括該用戶的會話cookie 和其他認(rèn)證信息,發(fā)送到一個存在漏洞的web應(yīng)用程序。這就允許了攻擊者迫使用戶瀏覽器向存在漏洞的應(yīng)用程序發(fā)送請求,而這些請求會被應(yīng)用程序認(rèn)為是用戶的合法請求。5.6.2.危害攻擊者能讓受害用戶修改可以修改的任何數(shù)據(jù),或者是執(zhí)行允許使用的任何功能。5.6.3.解決方法第一步,新建CSRF令牌添加進(jìn)用戶每次登陸以及存儲在httpsession里,這種令牌至少對每個用戶會話來說應(yīng)該是唯一的,或者是對每個請求是唯一的。/this code is in the DefaultU
27、ser implementation of ESAPI/*This user's CSRF token.*/Private String csrfToken=resetCSRFToken();.Public String resetCSRFToken()csrfToken=ESAPI.randomizer().getRandomString(8,DefaultEncoder.CHAR_ALPHANUMERICS);returncsrfToken;第二步,令牌同樣可以包含在URL中或作為一個URL參數(shù)記/隱藏字段。/from HTTP Utilitiles interfaceFinal
28、static String CSRF_TOKEN_NAME="ctoken"/this code is from the Default HTTP Utilities implementation in ESAPIPublic String addCSRFToken(Stringhref)User user=ESAPI.authenticator().getCurrentUser();if(user.isAnonymous()returnhref;/if there are already parameters append with&,otherwise appe
29、nd with?String token=CSRF_TOKEN_NAME+"="+user.getCSRFToken();return href.indexOf('?')!=-1?href+"&"+token:href+"?"+token;.public StringgetCSRFToken()User user=ESAPI.authenticator().getCurrentUser();if(user=null) return null;return user.getCSRFToken();第三步,在服務(wù)器
30、端檢查提交令牌與用戶會話對象令牌是否匹配。/this code is from the Defaul tHTTP Utilities implementation in ESAPIPublic void verifyCSRFToken(HttpServletRequest request)throwsIntrusionExceptionUser user=ESAPI.authenticator().getCurrentUser();/check if user authenticated with this request-noCSRFprotection requiredif(request
31、.getAttribute(user.getCSRFToken()!=null)return;String token=request.getParameter(CSRF_TOKEN_NAME);if(!user.getCSRFToken().equals(token)throw new IntrusionException("Authenticationfailed","Possibly forgeted HTTP request without proper CSRFtokendetected");第四步,在注銷和會話超時,刪除用戶對象會話和會話銷毀
32、。/this code is in the DefaultUser implementation of ESAPIPublic void logout()ESAPI.httpUtilities().killCookie(ESAPI.currentResponse(),ESAPI.currentRequest(),HTTPUtilities.REMEMBER_TOKEN_COOKIE_NAME);HttpSession session=ESAPI.currentRequest().getSession(false);if(session!=null)removeSession(session);
33、session.invalidate();ESAPI.httpUtilities().killCookie(ESAPI.currentRequest(),ESAPI.currentResponse(),"JSESSIONID");loggedIn=false;(Logger.SECURITY_SUCCESS,"Logout successful");ESAPI.authenticator().setCurrentUser(User.ANONYMOUS);5.7信息泄露和錯處理不當(dāng)5.7.1定義應(yīng)用程序常常產(chǎn)生錯誤信息并顯示給使用者。
34、很多時候,這些錯誤信息是非常有用的攻擊信息,因為它們揭示實施細(xì)則或有用的開發(fā)信息利用的漏洞。5.7.2危害Ø 泄露太多的細(xì)節(jié)(如錯誤堆棧跟蹤信息、SQL語句等等);Ø 登錄失敗后,通知用戶是否用戶ID或密碼出錯登錄失敗可能是由于ID或密碼錯誤造成的。這為一個對關(guān)鍵資產(chǎn)發(fā)動蠻力攻擊的攻擊者提供重要信息。5.7.3解決方法.案例1通過web.xml配置文件實現(xiàn)<error-page><exception-type>java.lang.Throwable</exception-type><location>/error
35、.jsp</location></error-page>.案例2針對登錄嘗試的攻擊,可以使用相同的報錯信息,比如都是提示"輸入的用戶名或者密碼錯誤!"。5.8失效的身份認(rèn)證和會話管理5.8.1定義與身份認(rèn)證和會話管理相關(guān)的應(yīng)用程序功能得不到正確的實現(xiàn),導(dǎo)致攻擊者破話密碼、密鑰、會話令牌或攻擊其他的漏洞去冒充其他用戶的身份。5.8.2危害這些漏洞可能導(dǎo)致部分甚至全部帳戶遭受攻擊。一旦攻擊成功,攻擊者能執(zhí)行合法用戶的任何操作。因此特權(quán)帳戶會造成更大的破壞。5.8.3解決方法Ø 使用內(nèi)置的會話管理功能。Ø 通過認(rèn)證的問候。
36、Ø 使用單一的入口點。Ø 確保在一開始登錄SSL保護(hù)的網(wǎng)頁。Ø 獲取注銷的權(quán)利。Ø 添加超時。Ø 確保你使用的是安全相關(guān)的功能。Ø 使用強大的認(rèn)證。Ø 不進(jìn)行默認(rèn)身份驗證/BAD-DON'TUSEPublic boolean login(String username,Stringpassword)Boolean isAuthenticated=true;try/makecalls to backend to actually perform login against datastoreif(!authentica
37、tionSuccess)isAuthenticated=false;catch(Exceptione)/handleexcreturnisAuthenticated;5.9 敏感信息泄露5.9.1定義保護(hù)與加密敏感數(shù)據(jù)已經(jīng)成為網(wǎng)絡(luò)應(yīng)用的最重要的組成部分。但是,簡單不加密的敏感數(shù)據(jù)是非常普遍的。許多Web應(yīng)用程序沒有正確保護(hù)敏感數(shù)據(jù),如信用卡、稅務(wù)ID和身份驗證憑據(jù)。攻擊者可能會竊取或篡改這些弱保護(hù)的數(shù)據(jù)以進(jìn)行信用卡詐騙、身份竊取,或其他犯罪。敏感數(shù)據(jù)值需額外的保護(hù),比如在存放或在傳輸過程中的加密,以及在與瀏覽器交換時進(jìn)行特殊的預(yù)防措施。5.9.2危害Ø 攻擊者能夠取得或是篡改機密的或
38、是私有的信息。Ø 攻擊者通過這些秘密的竊取從而進(jìn)行進(jìn)一步的攻擊。Ø 造成企業(yè)形象破損,用戶滿意度下降,甚至?xí)蟹稍V訟等。5.9.3解決方法Ø 驗證你的結(jié)構(gòu)。Ø 識別所有的敏感數(shù)據(jù)。Ø 識別這些數(shù)據(jù)存放的所有位置。Ø 確保所應(yīng)用的威脅模型能夠應(yīng)付這些攻擊。Ø 使用加密手段來應(yīng)對威脅。Ø 使用一定的機制來進(jìn)行保護(hù)。Ø 文件加密。Ø 數(shù)據(jù)庫加密。Ø 數(shù)據(jù)元素加密。Ø 正確的使用這些機制。Ø 使用準(zhǔn)的強算法。Ø 合理的生成,分發(fā)和保護(hù)密鑰。Ø 準(zhǔn)備密鑰
39、的變更。Ø 驗證實現(xiàn)方法。Ø 確保使用準(zhǔn)的強算法。Ø 確保所有的證書、密鑰和密碼都得到安全的存放。Ø 有一個安全的密鑰分發(fā)和應(yīng)急處理的方案。5.10不安全的通信5.10.1定義對于不加密的應(yīng)用程序的網(wǎng)絡(luò)信息傳輸,需要保護(hù)敏感的通信。加密(通常SSL)的鏈路,必須用于所有身份驗證的連接,特別是通過Internet訪問的網(wǎng)頁,以及后端的連接。否則,應(yīng)用程序?qū)⒈┞渡矸蒡炞C或會話令牌。5.10.2危害Ø 攻擊者能夠取得或是篡改機密的或是私有的信息。Ø 攻擊者通過這些秘密的竊取從而進(jìn)行進(jìn)一步的攻。Ø 造成企業(yè)形象破損,用戶滿意度下降,
40、甚至?xí)蟹稍V訟等。5.10.3解決方法Ø 提供合理的保護(hù)機制。Ø 對于敏感數(shù)據(jù)的傳輸,對所有連接都要使用TLS。Ø 在傳輸前對單個數(shù)據(jù)都要進(jìn)行加密;(如XML-Encryption)Ø 在傳輸前對信息進(jìn)行名;(如XML-Signature)Ø 正確的使用這些機制。Ø 使用準(zhǔn)的強算法。Ø 合理管理密鑰和證書。Ø 在使用前驗證SSL證書。5.11功能級訪問控制缺失5.11.1定義這個漏洞事實上也是與認(rèn)證相關(guān)的,與我們前面提到的Top5不安全的直接對象引用也是類似的,不同在于這個漏洞是說系統(tǒng)已經(jīng)對URL的訪問做限制,但
41、這種限制卻實際并沒有生效。大多數(shù)Web應(yīng)用程序在功能在UI中可見驗證功能級別的訪問權(quán)限,但是,應(yīng)用程序需要在每個功能被訪問時在服務(wù)器端執(zhí)行相同的訪問控制檢查。如果請求沒有被驗證,攻擊者能夠偽造請求以在未經(jīng)適當(dāng)授權(quán)時訪問功能。常見的錯誤是,我們在用戶認(rèn)證后只顯示給用戶認(rèn)證過的頁面和菜單選項,而實際上這些僅僅是表示層的訪問控制而不能真正生效,攻擊者能夠很容易的就偽造請求直接訪問未被授權(quán)的頁面。我們舉個例子來說明這個過程:1、攻擊者發(fā)現(xiàn)他自己的訪問地址為/user/getAccounts;2、他修改他的目錄為/admin/getAccounts或/manager/getAccounts;3、這樣攻擊
42、者就能夠查看到更多的賬戶信息。5.11.2解決方法對每個URL,我們必須做三件事:Ø 如果這個URL不是公開的,那么必須限制能夠訪問他的授權(quán)用戶ü 加強基于用戶或角色的訪問控制;ü 完全禁止訪問未被授權(quán)的頁面類型(如配置文件、日志文件、源文件等)Ø 驗證你的構(gòu)架ü 在每一個層次都使用簡單肯定的模型;ü 確保每一層都有一個訪問機制Ø 驗證你的實現(xiàn)ü 不要使用自動化的分析工具;ü 確保每個URL都被外部過濾器或其他機制保護(hù);ü 確保服務(wù)器的配置不允許對非授權(quán)頁面的訪問u 實例public boole
43、an isAuthorized(Object key,Object runtimeParameter);public voidassertAuthorized(Object key,Object runtimeParameter) throwsAccessControlException;boolean isAuthorizedForURL(String url);boolean isAuthorizedForFunction(String functionName);boolean isAuthorizedForData(String action,Objectdata);boolean i
44、sAuthorizedForFile(String filepath);boolean isAuthorizedForService(String serviceName);voidassertAuthorizedForURL(String url)throwsAccessControlException;voidassertAuthorizedForFunction(String functionName) throwsAccessControlException;voidassertAuthorizedForData(String action,Objectdata) throwsAcce
45、ssControlException;voidassertAuthorizedForFile(String filepath)throws AccessControlException;voidassertAuthorizedForService(String serviceName) throwsAccessControlException;5.12安全配置錯誤5.12.1定義好的安全需要對應(yīng)用程序、框架、應(yīng)用程序服務(wù)器、web服務(wù)器、數(shù)據(jù)庫服務(wù)器和平臺定義和執(zhí)行安全配置。由于許多設(shè)置的默認(rèn)值并不是安全的,因此,必須定義、實施和維護(hù)這些設(shè)置。這包含了對所有的軟件保持及時地更新,包括所有應(yīng)用程
46、序的庫文件。5.12.2危害安全配置錯誤可以發(fā)生在一個應(yīng)用程序堆棧的任何層面,包括平臺、Web服務(wù)器、應(yīng)用服務(wù)器、數(shù)據(jù)庫、框架和自定義代碼。這些漏洞使攻擊者能經(jīng)常訪問一些未授權(quán)的系統(tǒng)數(shù)據(jù)或功能。有時,這些漏洞導(dǎo)致系統(tǒng)的完全攻破,你的數(shù)據(jù)可能會隨著時間推移被全部盜走或者篡改,恢復(fù)的花費可能會很昂貴。5.12.3解決方法Ø 開發(fā)、質(zhì)量保證和生產(chǎn)環(huán)境都應(yīng)該配置相同(每個環(huán)境中使用不同的密碼)。這個過程應(yīng)該是自動化的,以盡量減少安裝一個新安全環(huán)境的耗費。Ø 能及時了解并部署每個已部署環(huán)境的所有最新軟件更新和補丁的過程。這需要包括通常被忽略的所有代碼的庫文件。Ø 應(yīng)用程序架
47、構(gòu)能在組件之間供有效的分離和安全性。Ø 實施漏洞掃和經(jīng)常進(jìn)行審計以幫助檢測將來可能的錯誤配置或沒有安裝的補丁。5.13使用含有已知漏洞的組件5.13.1定義組件,比如:庫文件、框架和其它軟件模塊,幾乎總是以全部的權(quán)限運行。如果一個帶有 漏洞的組件被利用,這種攻擊可以造成更為嚴(yán)重的數(shù)據(jù)丟失或服務(wù)器接管。應(yīng)用程序使用帶有已知漏洞的組件會破壞應(yīng)用程序防御系統(tǒng),并使一系列可能的攻擊和影響成為可能。5.13.2危害事實上,大多數(shù)的應(yīng)用都存在這些問題因為大多數(shù)的開發(fā)團(tuán)隊并不會把及時更新組件/庫作為他們的工作重心。在很多情況下,開發(fā)者都不了解他們所使用的全部組件,更不用說組件的
48、版本了。組件的依賴性使情況更加糟糕。危害性是包括是由低到高全系列的漏洞,包括注入,不安全的訪問控制,XSS等。受影響范圍也從最低的數(shù)據(jù)污染到主機被完全接管和數(shù)據(jù)的泄漏。針對具體業(yè)務(wù),從受影響的應(yīng)用中,評估每個脆弱點對業(yè)務(wù)控制來說意味著什么,可能是非常細(xì)微的影響也有可能意味著被完全攻破。5.13.3解決方法Ø 標(biāo)識正在使用的所有組件及其版本,包括所有的組件(比如版本插件)。Ø 在公共數(shù)據(jù)庫,項目郵件列表和安全郵件列表中時刻關(guān)注這些組件的安全信息并保證它們是最新的。Ø 建立組件使用的安全策略,比如需要某些軟件開發(fā)實踐,通過安全性測試和可接受的授權(quán)許可。Ø 在
49、適當(dāng)?shù)那闆r下,考慮增加對組件的安全封裝,去掉不使用的功能和/或安全薄弱的或者組件易受攻擊的方面。5.14未驗證的重定向和轉(zhuǎn)發(fā)5.14.1定義Web應(yīng)用程序經(jīng)常將用戶重定向和轉(zhuǎn)發(fā)到其他網(wǎng)頁和網(wǎng)站,并且利用不可信的數(shù)據(jù)去判定 目的頁面。如果沒有得到適當(dāng)驗證,攻擊者可以重定向受害用戶到釣魚軟件或惡意網(wǎng)站,或者使用轉(zhuǎn)發(fā)去訪問未授權(quán)的頁面。5.14.2危害這種重定向可能試圖安裝惡意軟件或者誘使受害者泄露密碼或其他敏感信息。不安全的轉(zhuǎn)發(fā)可能允許繞過訪問控制。5.14.3解決方法Ø 避免使用重定向和轉(zhuǎn)發(fā)。Ø 如果使用了重定向和轉(zhuǎn)發(fā),則不要在具體目標(biāo)時涉及到用戶參數(shù)。Ø 如果使用目標(biāo)參數(shù)無法避免,應(yīng)確保其所
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站承包租賃合同
- 普適藝人演藝經(jīng)紀(jì)合同全約 (2025年版)
- 分析電子商務(wù)行業(yè)面臨的挑戰(zhàn)及其應(yīng)對策略
- 醫(yī)療設(shè)備出租合同
- 學(xué)校廣告制作合同
- 專業(yè)藝術(shù)照拍攝與制作合同
- 關(guān)于加班的合同范本
- 店面出租轉(zhuǎn)讓合同范本
- 展會物料安裝合同范本
- 網(wǎng)絡(luò)電影拍攝合同范本
- 【農(nóng)村電商物流最后一公里配送優(yōu)化探究(論文)7600字】
- 2024年計算機軟件水平考試-高級系統(tǒng)架構(gòu)師考試近5年真題附答案
- 耳穴壓豆課件
- QSPI-9708-2016-光伏電站安裝施工質(zhì)量驗收規(guī)定
- 急性冠脈綜合征
- 公路水運工程施工企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員考核大綱和模擬試題庫1
- 預(yù)應(yīng)力混凝土管樁(L21G404)
- 財政投資評審咨詢服務(wù)預(yù)算和結(jié)算評審項目 投標(biāo)方案(技術(shù)方案)
- 2024養(yǎng)雞場雞糞買賣合同范本
- 燃煤發(fā)電廠液氨罐區(qū)安全管理規(guī)定
- 蘇教版六年級下冊數(shù)學(xué)期末測試卷【完整版】
評論
0/150
提交評論