防范xss漏洞的措施:
輸入過濾
有時候需要多次過濾 ,例如 < scrip < script > t >過濾掉 < script > 后還是 < script >,需要注意多個過濾器的先后次序。當多個過濾器一起生效時,有可能后進行的過濾導致前面的過濾失效。
例如 < scrip < script > t >過濾掉 < script > 后還是 < script >
純前端渲染
在純前端渲染中,我們會明確的告訴瀏覽器:下面要設置的內容是文本(.innerText),還是屬性(.setAttribute),還是樣式(.style)等等。瀏覽器不會被輕易的被欺騙,執行預期外的代碼了。
.innerText
.setAttribute
.style
轉義 HTML
如果拼接 HTML 是必要的,就需要采用合適的轉義庫,對 HTML 模板各處插入點進行充分的轉義。
常用的模板引擎,如 doT.js、ejs、FreeMarker 等,對于 HTML 轉義通常只有一個規則,就是把 & < > " ' / 這幾個字符轉義掉,確實能起到一定的 XSS 防護作用。
& < > " ' /
標簽和屬性基于白名單過濾
對于副文本編輯器來說,其產物本身就是 html 代碼,所以沒辦法簡單粗暴使用轉義來處理,應該要對內容中的標簽和屬性,基于白名單進行過濾。(附 XSS 黑名單:DOM 中的內聯事件監聽器如onclick等、<a>標簽的href屬性、<script>標簽、css 中的url功能)
onclick
<a>
href
<script>
url
回答所涉及的環境:聯想天逸510S、Windows 10。
防范xss漏洞的措施:
輸入過濾
有時候需要多次過濾 ,
例如 < scrip < script > t >過濾掉 < script > 后還是 < script >,需要注意多個過濾器的先后次序。當多個過濾器一起生效時,有可能后進行的過濾導致前面的過濾失效。純前端渲染
在純前端渲染中,我們會明確的告訴瀏覽器:下面要設置的內容是文本(
.innerText),還是屬性(.setAttribute),還是樣式(.style)等等。瀏覽器不會被輕易的被欺騙,執行預期外的代碼了。轉義 HTML
如果拼接 HTML 是必要的,就需要采用合適的轉義庫,對 HTML 模板各處插入點進行充分的轉義。
常用的模板引擎,如 doT.js、ejs、FreeMarker 等,對于 HTML 轉義通常只有一個規則,就是把
& < > " ' /這幾個字符轉義掉,確實能起到一定的 XSS 防護作用。標簽和屬性基于白名單過濾
對于副文本編輯器來說,其產物本身就是 html 代碼,所以沒辦法簡單粗暴使用轉義來處理,應該要對內容中的標簽和屬性,基于白名單進行過濾。(附 XSS 黑名單:DOM 中的內聯事件監聽器如
onclick等、<a>標簽的href屬性、<script>標簽、css 中的url功能)回答所涉及的環境:聯想天逸510S、Windows 10。