最小權限原則
使用專門的用戶(如www-data
或tomcat
)運行JSP應用,避免以root
用戶啟動服務;配置文件權限(通過chmod
、chown
命令),確保JSP文件、配置文件、日志文件等僅能被授權用戶訪問。
輸入驗證與過濾
對所有用戶輸入(如表單、URL參數)進行嚴格驗證(如格式檢查、長度限制),過濾特殊字符(如<
、>
、'
、"
),防止SQL注入、跨站腳本(XSS)等攻擊;優先使用JSP標準標簽庫(JSTL)、表達式語言(EL)替代原生Java代碼處理輸入,輸出時通過<c:out>
標簽或EL的${fn:escapeXml()}
函數進行編碼。
使用HTTPS加密通信
獲取并安裝有效的SSL/TLS證書(如Let’s Encrypt免費證書),配置Web服務器(如Tomcat)啟用HTTPS,強制客戶端通過https://
訪問;在server.xml
中配置<Connector>
節點的SSLEnabled="true"
、keystoreFile
(證書路徑)、keystorePass
(證書密碼)等參數。
安全會話管理
配置隨機生成的會話ID(Tomcat默認支持),設置合理的會話超時時間(如<session-config><session-timeout>30</session-timeout></session-config>
);啟用cookie的HttpOnly
(防止XSS竊取cookie)和Secure
(僅通過HTTPS傳輸)屬性,在context.xml
中添加<CookieProcessor httpOnly="true" secure="true"/>
或在web.xml
中配置<cookie-config><http-only>true</http-only><secure>true</secure></cookie-config>
。
錯誤處理與日志審計
配置自定義錯誤頁面(如404.jsp
、500.jsp
),避免向用戶暴露服務器堆棧跟蹤、路徑等敏感信息;記錄詳細的錯誤日志(通過logging.properties
調整日志級別),定期審查/var/log/tomcat/
或應用日志,使用auditd
等工具監控可疑活動(如頻繁的登錄失?。?。
禁用不必要的功能與服務
刪除Tomcat默認目錄(如webapps/ROOT
、webapps/docs
、webapps/examples
),防止惡意應用自動部署;禁用目錄列表(在web.xml
中配置<directory-listing>["否", "disable directory listing", "Tomcat disable directory listing configuration"]</directory-listing>
);關閉AJP連接器(若未使用Apache反向代理),注銷server.xml
中的<Connector port="8009" protocol="AJP/1.3"/>
。
安全配置Web服務器(Tomcat為例)
隱藏Tomcat版本信息(在server.xml
的<Connector>
節點添加server="Apache"
);關閉自動部署(設置autoDeploy="false"
、unpackWARs="false"
);配置防火墻(ufw
或iptables
)僅開放必要端口(如80/443、8080,若Tomcat直接對外提供服務);限制root賬戶使用,創建專用用戶(如tomcat
)并賦予最小權限。
定期更新與補丁管理
保持Ubuntu系統、JDK、Tomcat及依賴庫(如數據庫驅動)為最新版本,定期檢查官方安全公告(如Oracle JDK安全補丁、Tomcat CVE漏洞),及時應用更新;監控安全漏洞數據庫(如CVE Details),提前應對潛在威脅。
安全編碼與訪問控制
遵循OWASP Top 10等安全編碼標準,避免使用默認管理員賬戶(如admin
),強制用戶設置強密碼(如包含大小寫字母、數字、特殊字符,長度≥8位);使用基于角色的訪問控制(RBAC),在數據庫中設計角色(如admin
、user
)與權限表,代碼中通過@RolesAllowed
注解或web.xml
的<security-constraint>
限制用戶對敏感資源(如/admin/*
)的訪問;加密敏感數據(如用戶密碼),使用強哈希算法(如SHA-256、SHA-512)加鹽存儲。