1.1 已解密的登錄請求概述
在應用程序測試過程中,檢測到將未加密的登錄請求發送到服務器。由於登錄過程所用的部分輸入字段(例如:用戶名、密碼、電子郵件地址、社會保險號碼,等等)是個人敏感信息,建議通過加密連接(如 SSL)將其發送到服務器。任何以明文傳給服務器的信息都可能被竊,稍后可用來電子欺騙身份或偽裝用戶。 此外,若干隱私權法規指出,用戶憑證之類的敏感信息一律以加密方式傳給網站。
1.2 安全風險及原因分析
安全風險中,可能會竊取諸如用戶名和密碼等未經加密即發送了的用戶登錄信息
原因:諸如用戶名、密碼和信用卡號之類的敏感輸入字段未經加密即進行了傳遞
1.3 AppScan掃描建議
1. 確保所有登錄請求都以加密方式發送到服務器。
2. 請確保敏感信息,例如:
- 用戶名
- 密碼
- 社會保險號碼
- 信用卡號碼
- 駕照號碼
- 電子郵件地址
- 電話號碼
- 郵政編碼
一律以加密方式傳給服務器。
1.4 應用程序解決方案
已解密的登錄請求,要求就是數據要加密傳輸。最簡單有效的解決方式采用SSL加密協議傳輸,在進行測試過程中也嘗試在tomcat下SSL方式配置,寫下來供參考。
tomcat在生成證書文件后,在service.xml 進行配置: 給證書加上日期年限-validity 36500 100年
- 安全證書生成過程:進入到cmd 進入到cd jdk bin目錄下執行
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "D:\app.keystore" -validity 36500
- 生成證書 任意路徑都行,放到tomcat文件夾下好管理。
- 注意:“名字與姓氏”應該是域名(服務器地址或域名)若輸成了姓名,和真正運行的時候域名不符,會出問題
- 進入到tomcat 的conf 目錄下修改servlet.xml ,找到這個配置,添加你的證書的地址以及密碼在service.xml配置SSL
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:\tomcat-6.0\conf\app.keystore" keystorePass="110120"/>
Tomcat服務器:
JDK版本過低也會帶來不安全漏洞,請升級JDK為最新版本。升級JDK風險請安按照系統升級風險酌情考慮。
(先備份再配置,低版本的配置后有啟動不了的風險,請升級tomcat和jdk版本,JDK1.7及以上支持TLS1.2協議)
如果服務端不支持SSLv3,只支持TLSv1、TLSv1.1和TLSv1.2,又該如何設置呢?
Tomcat 6 使用屬性 sslProtocols="TLSv1,TLSv1.1,TLSv1.2" 示例代碼如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2" --去掉 sslProtocol="TLS" keystoreFile="D:\tomcat-6.0\conf\app.keystore" keystorePass="110120"/>
Tomcat 7 and later這時需要設置另外一個屬性sslEnabledProtocols,示例代碼如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" --去掉 sslProtocol="TLS" keystoreFile="D:\tomcat-6.0\conf\app.keystore" keystorePass="110120"/>
開發人員應該能夠輕松應對SSL 3.0 SSL 2.0 Poodle漏洞
在這里我是把證書放到tomcat文件夾下。注意要把8443端口改為你自己服務器的端口,以防一直跳轉到8443端口。
這樣配置后雖然可以通過https訪問,但仍然還可以通過8080使用普通的http訪問,所以還必須禁止普通模式登錄。把原有的普通模式注釋掉即可。
<!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
還得在web.xml添加配置。在tomcat的conf下的web.xml的最后添加配置文件實現http協議自動轉化為https 協議,配置文件添加在 <welcome-file-list> </welcome-file-list> 配置文件后面
對所有的請求都轉化為https:
<security-constraint> <!-- Authorization setting for SSL --> <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>
只對 .jsp 的請求自動轉化為https
<security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.action</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
應注意,由於項目的一些組件無法通過https,因此url-pattern字段只對.jsp和.action進行了限制,如果不做特定限制,則系統默認是全部使用https傳輸。而且上述設置一旦在某個工程中出現,那么當前tomcat將全局采用這一配置。