編碼階段預防XSS漏洞的措施有以下這些:
將Cookie設置為HttpOnl:攻擊Web應用大多數是為了獲得合法用戶的Cookie信息,所以應該減少將大量的數據存儲在Cookie中,在任何可能的時候使用HttpOnly Cookie。HttpOnly Cookie是某些瀏覽器所支持的一種防御機制,應用程序能使用它來防止XSS攻擊。當一個Cookie以這種方式標記時,支持它的瀏覽器將阻止客戶端JavaScript直接訪問Cookie。雖然瀏覽器仍然會在請求的HTTP消息頭中提交這個Cookie,但它不會出現在document.cookie返回的字符串中。
謹慎使用DOM操:基于DOM的XSS是利用DOM操作實現的針對客戶端的XSS注入,由于被處理的數據不在服務器控制范圍內,因此不能通過在服務器端部署防御策略來解決,這就要求開發人員要謹慎、合理地使用DOM操作,盡可能避免使用DOM進行客戶端重定向、文檔操作或調用本地數據等敏感操作,轉而將這些行為放到服務器端使用動態頁面的方式來實現。
采用白名單對輸入數據進行驗證:例如在服務器端,如果UserName字段僅允許字母數字字符,且不區分大小寫,則使用以下正則表達式^[ a-zA-Z0-9]*$進行驗證。
^[ a-zA-Z0-9]*$
使用黑名單對輸入數據進行安全檢查或過濾:例如在服務器端,針對非法的HTML代碼包括單雙引號等,應編寫函數對其進行檢查或過濾。需要檢查或過濾的特殊字符至少包含以下字符’、”、<、>、空格鍵、TAB鍵、script、&、#、%、+、$、(、)、xss、expression等。
采用開發框架自帶的標簽輸出方:禁止采用<%=pValue %>不安全的輸出方式,應該采用標簽形式輸出,例如<s:hidden name="id" value="%{secAppConf.id}" />,采用標簽方式輸出時,系統默認會自動對數據做HTML轉換。
<s:hidden name="id" value="%{secAppConf.id}" />
對輸出數據進行凈:應對輸出數據進行過濾和轉義,將敏感字符轉換為其對應的實體字符來清理HTML特殊字符。例如,將HTML標簽最關鍵的字符<、>、&編碼為<、>、&。
回答所涉及的環境:聯想天逸510S、Windows 10。
編碼階段預防XSS漏洞的措施有以下這些:
將Cookie設置為HttpOnl:攻擊Web應用大多數是為了獲得合法用戶的Cookie信息,所以應該減少將大量的數據存儲在Cookie中,在任何可能的時候使用HttpOnly Cookie。HttpOnly Cookie是某些瀏覽器所支持的一種防御機制,應用程序能使用它來防止XSS攻擊。當一個Cookie以這種方式標記時,支持它的瀏覽器將阻止客戶端JavaScript直接訪問Cookie。雖然瀏覽器仍然會在請求的HTTP消息頭中提交這個Cookie,但它不會出現在document.cookie返回的字符串中。
謹慎使用DOM操:基于DOM的XSS是利用DOM操作實現的針對客戶端的XSS注入,由于被處理的數據不在服務器控制范圍內,因此不能通過在服務器端部署防御策略來解決,這就要求開發人員要謹慎、合理地使用DOM操作,盡可能避免使用DOM進行客戶端重定向、文檔操作或調用本地數據等敏感操作,轉而將這些行為放到服務器端使用動態頁面的方式來實現。
采用白名單對輸入數據進行驗證:例如在服務器端,如果UserName字段僅允許字母數字字符,且不區分大小寫,則使用以下正則表達式
^[ a-zA-Z0-9]*$進行驗證。使用黑名單對輸入數據進行安全檢查或過濾:例如在服務器端,針對非法的HTML代碼包括單雙引號等,應編寫函數對其進行檢查或過濾。需要檢查或過濾的特殊字符至少包含以下字符’、”、<、>、空格鍵、TAB鍵、script、&、#、%、+、$、(、)、xss、expression等。
采用開發框架自帶的標簽輸出方:禁止采用<%=pValue %>不安全的輸出方式,應該采用標簽形式輸出,例如
<s:hidden name="id" value="%{secAppConf.id}" />,采用標簽方式輸出時,系統默認會自動對數據做HTML轉換。對輸出數據進行凈:應對輸出數據進行過濾和轉義,將敏感字符轉換為其對應的實體字符來清理HTML特殊字符。例如,將HTML標簽最關鍵的字符<、>、&編碼為<、>、&。
回答所涉及的環境:聯想天逸510S、Windows 10。