IBM AppScan 各種測試問題修改方案
1. SQL注入檔案寫入(需要使用者驗證)
解決辦法:通過建立過濾器方法,對所有使用者輸入資訊進行清理過濾。通過清理過濾使用者輸入所包含的危險字元,便可能防止惡意的使用者導致應用程式執行計劃外的任務,例如:啟動任意 SQL 查詢、嵌入將在客戶端執行的Javascript程式碼、執行各種作業系統命令等。
建議過濾出所有以下字元:
[1] |(豎線符號) [2] &(&符號) [3];(分號) [4] $(美元符號) [5] %(百分比符號) [6] @(at 符號) [7] '(單引號) [8] "(引號) [9] \'(反斜槓轉義單引號) [10] \"(反斜槓轉義引號) [11] <>(尖括號) [12] ()(括號) [13] +(加號) [14] CR(回車符,ASCII 0x0d) [15] LF(換行,ASCII 0x0a) [16] ,(逗號) [17] \(反斜槓)
注意Rational AppScan Standard一旦開啟,將始終會報告此問題。所以此問題是需要使用者驗證。具體可參考http://www-01.ibm.com/support/docview.wss?uid=swg21472385
2. 會話未更新
解決辦法:在登入頁面加入以下程式碼
//解決安全性問題,會話未更新 request.getSession().invalidate();//清空session Cookie[] cookies = request.getCookies();//獲取cookie if(null != cookies &&cookies.length> 0){ for(Cookie cookie : cookies){ cookie.setMaxAge(0);//讓cookie過期 } }
3. 跨站點請求偽造
解決辦法:在過濾器中增加對請求響應資訊來源進行判斷過濾;
//解決安全性問題:跨站點請求偽造 String referer = req.getHeader("Referer"); //REFRESH String serverName = request.getServerName(); if(null != referer&&referer.indexOf(serverName) < 0){ req.getRequestDispatcher(req.getRequestURI()).forward(req, response); }
4. 跨站點指令碼編制
解決辦法:通過建立過濾器方法,增加對請求響應資訊來源進行判斷過濾及對所有使用者輸入資訊進行清理過濾。通過清理過濾使用者輸入所包含的危險字元,便可能防止惡意的使用者導致應用程式執行計劃外的任務,例如:啟動任意 SQL 查詢、嵌入將在客戶端執行的Javascript程式碼、執行各種作業系統命令等。具體實現可參考結合1.SQL注入檔案寫入 與3.跨站點請求偽造 的解決方法;
5. 已解密的登入請求
解決辦法:
1.對使用者所輸入的密碼在頁面進行MD5加密並反饋至密碼輸入框。
2. 手動生成SSL安全訪問證書;在此不做介紹,相關方法可通過網上查詢;
3. 將產品HTTP訪問方式改為SSL安全訪問方式;在Apache-Tomcat應用伺服器的conf資料夾下的server.xml增加以下程式碼:
<!--設定SSL(Https)安全訪問方式;訪問埠為:8443 -> <Connectorport="8443"minSpareThreads="5"maxSpareThreads="75" enableLookups="true"disableUploadTimeout="true" acceptCount="100"maxThreads="200" scheme="https" secure="true"SSLEnabled="true" ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" keystoreFile="keystore/server.keystore"keystorePass="123456" clientAuth="false"sslProtocol="TLS"/>
(注:keystore/server.keystore為證書儲存路徑;123456為證書密碼;)
4. 在產品WEB.XML檔案中加上以下程式碼:
<!--解決安全性問題:已解密登入請求;將改為SSL安全訪問方式 --> <security-constraint> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
6. 啟用了不安全的 HTTP 方法
解決辦法:修改web工程中或者伺服器web.xml,增加安全配置資訊,禁用不必要HTTP方法
<!--解決安全性問題:啟用不安全HTTP方法 --> <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>HEAD</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
7. 會話 cookie 中缺少HttpOnly屬性
解決辦法:在過濾器中增加對請求響應資訊頭的設定
//解決使用者的cookie可能被盜用的問題,減少跨站指令碼攻擊
resp.setHeader("Set-Cookie", "name="+newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(new Date())+"; Secure; HttpOnly");
8. 發現 Web 應用程式原始碼洩露模式
解決辦法:針對程式碼註釋中出現的部分原始碼進行清除;
9. 自動填寫未對密碼欄位禁用的 HTML 屬性
解決辦法:在密碼輸入框中增加autocomplete="off" 屬性
10. 發現內部 IP 洩露模式
解決辦法:針對程式碼中出現的IP地址進行清除;
11. 檢測到應用程式測試指令碼
解決辦法:針對程式碼中出現的測試指令碼檔案進行清除;指令碼檔案主要包括以test.php、test.asp、test.cgi、test.html 等;並對一些包含相關的敏感字元檔名稱進行修改;敏感字元包括:test、old等;
12. Unix 檔案引數變更
解決辦法:通過建立過濾器方法,增加對所有使用者輸入資訊中是否包含“..”(兩個點)字串進行清理過濾。具體實現可參考結合1.SQL注入檔案寫入的解決方法;
13. Windows 檔案引數變更
解決辦法:通過建立過濾器方法,增加對所有使用者輸入資訊中是否包含“..”(兩個點)字串進行清理過濾。具體實現可參考結合1.SQL注入檔案寫入的解決方法;
14. 連結注入(便於跨站請求偽造)
解決辦法:通過建立過濾器方法,增加對請求響應資訊來源進行判斷過濾及對所有使用者輸入資訊進行清理過濾。通過清理過濾使用者輸入所包含的危險字元,便可能防止惡意的使用者導致應用程式執行計劃外的任務,例如:啟動任意 SQL 查詢、嵌入將在客戶端執行的Javascript程式碼、執行各種作業系統命令等。具體實現可參考結合1.SQL注入檔案寫入 與3.跨站點請求偽造 的解決方法;
15. 通過框架釣魚
解決辦法:通過建立過濾器方法,增加對請求響應資訊來源進行判斷過濾及對所有使用者輸入資訊進行清理過濾。通過清理過濾使用者輸入所包含的危險字元,便可能防止惡意的使用者導致應用程式執行計劃外的任務,例如:啟動任意 SQL 查詢、嵌入將在客戶端執行的Javascript程式碼、執行各種作業系統命令等。具體實現可參考結合1.SQL注入檔案寫入 與3.跨站點請求偽造 的解決方法;
16. 不充分帳戶封鎖
解決辦法:對使用者登入錯誤次數進行限制,並在一定的時間內不請允許再登入;
17. 檢測到檔案替代版本
解決辦法:針對產品中所有開頭為“Copy of”、“_”、“.”、“~”和“Old”的檔案進行清理;
18. 發現電子郵件地址模式
解決辦法:針對程式碼中出現的電子郵件地址進行清除;
19. HTML 註釋敏感資訊洩露
解決辦法:針對程式碼註釋中出現的敏感資訊進行清除;敏感資訊包括:註釋的原始碼、電子郵件、IP地址等;
原文 : http://p.primeton.com/articles/53c64b6ee13823319f000048