首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Web 安全防護指南:XSS、SQL 注入、會話管理與檔案上傳

     編輯:Java 綜合教學

Web 安全防護核心領域

Web 應用面臨多層面威脅,需從客戶端腳本、伺服器應用、檔案上傳三個維度建立防禦體系。

一、客戶端腳本安全:XSS 與 Cookie 劫持

跨站腳本攻擊(XSS)

攻擊者透過「HTML 注入」植入惡意腳本,受害者瀏覽頁面時腳本執行,竊取 Cookie、劫持會話、偽造請求。

典型場景:輸入框未過濾,提交 <script>alert(document.cookie)</script>,管理員查看後台時觸發。

防禦措施

  • HttpOnly Cookie:禁止 JavaScript 讀取 Cookie,防竊取 Session ID。
    <Context ... useHttpOnly="true"/>
    或 web.xml:
    <session-config>
      <cookie-config><http-only>true</http-only></cookie-config>
    </session-config>
  • 輸出編碼/轉義:頁面輸出用戶資料時,對 < > & " ' 進行 HTML Entity 編碼(JSTL c:out、EL ${fn:escapeXml()})。
  • 輸入驗證與白名單:嚴格限制輸入長度、字元集、格式;富文本採用白名單標籤過濾(如 OWASP Java HTML Sanitizer)。
  • CSP (Content Security Policy):HTTP Header 限制腳本來源,降低注入風險。

二、伺服器端應用安全

1. SQL 注入

成因:用戶可控輸入直接拼接進 SQL 語句。
根治:全面使用 PreparedStatement 參數化查詢,嚴禁字串拼接 SQL。

2. 關閉詳細錯誤回顯

生產環境不應暴露堆疊追蹤、SQL 錯誤細節。在 web.xml 設定友善錯誤頁:

<error-page>
  <error-code>404</error-code>
  <location>/error/404.jsp</location>
</error-page>
<error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/error/500.jsp</location>
</error-page>

3. 資料庫最小權限原則

  • 應用連線帳號僅擁有業務必要的 SELECT/INSERT/UPDATE/DELETE 權限,禁止 DROP、TRUNCATE、GRANT 等高危操作。
  • 不同業務模組使用獨立資料庫帳號,隔離風險。

4. 認證與會話管理

  • 登入介面加入驗證碼,限制密碼錯誤次數(如 5 次鎖定 15 分鐘)。
  • 設定 Session 逾時自動銷毀:web.xml → <session-timeout>30</session-timeout>(單位:分鐘)。
  • 敏感操作(改密、綁定手機)需二次驗證(舊密碼、簡訊碼)。
  • Session ID 必須使用安全隨機產生器,登入後重新產生 Session ID(防 Session Fixation)。

三、檔案上傳漏洞防範

攻擊者上傳可執行腳本(JSP、PHP、ASPX),透過訪問路徑執行伺服器命令,導致伺服器淪陷。

多層防禦策略

  1. 副檔名白名單:僅允許 jpg, png, pdf, docx 等安全類型;拒絕 jsp, php, asp, exe, sh。
  2. MIME Type 驗證:檢查 Content-Type,但不可單獨依賴(可偽造)。
  3. 檔案內容檢測:讀取檔頭 Magic Number 驗證真實格式(如 JPEG 開頭 FF D8 FF)。
  4. 重新命名存儲:使用 UUID/時間戳/隨機數重命名,移除原副檔名,儲存於 非 Web 可直接訪問目錄(如 /data/uploads/)。
  5. Web 伺服器配置:上傳目錄關閉腳本執行權限(Nginx location ~ \.php$ { deny all; }、IIS 移除 Handler Mapping)。
  6. 下載而非直接訪問:提供下載 Servlet/Controller 讀取檔案流輸出,避免直接 URL 訪問。

安全是系統工程,需結合開發規範、程式碼審查、WAF、定期滲透測試持續強化。上述措施為基礎防線,實際部署請根據業務風險等級分級防護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved