本文介紹常見的Web客戶端安全漏洞。

跨站腳本攻擊(XSS)

跨站腳本攻擊(Cross Site Script,簡稱XSS)通常指黑客通過HTML注入方式篡改了網(wǎng)頁并插入惡意腳本,從而在用戶瀏覽網(wǎng)頁時,控制用戶瀏覽器的一種攻擊行為。XSS漏洞可被用于用戶身份竊取(特別是管理員)、行為劫持、掛馬、蠕蟲、釣魚等。跨站腳本攻擊是目前Web客戶端安全中最嚴重的漏洞。

跨站腳本攻擊根據(jù)效果的不同可以分為以下三種。
  • 反射型XSS攻擊:頁面僅把用戶輸入直接回顯在頁面或源碼中,誘導用戶點擊訪問包含惡意代碼的URL。
  • 存儲型XSS攻擊:XSS攻擊代碼存儲在服務器中。由于用戶可能會主動瀏覽被攻擊頁面,此種方法危害較大。
  • DOM型XSS攻擊:通過修改頁面的DOM節(jié)點形成XSS。

常見發(fā)生位置:所有涉及到用戶可控的輸入輸出點,如個人信息、文章、留言等。

防御措施:
  • 對重要的Cookie字段使用HTTPOnly參數(shù)。
  • 檢查所有用戶可控輸入。對所有的輸入點進行嚴格的檢查,過濾或攔截所有不符合當前語境的輸入。由于一般無法預期所有可能的輸出點語境,此種方法效果較差。
  • 檢查所有用戶輸入的輸出點。由于XSS攻擊最終是發(fā)生在輸出點,因此需要分析出用戶輸入數(shù)據(jù)的所有輸出點的環(huán)境,是輸入在HTML標簽中,還是HTML屬性、Script標簽、事件、CSS 位置中。針對不同的輸出位置,制定不同的轉義或過濾規(guī)則。
  • 處理富文本。在文章、論壇等需要用到富文本的地方,需要特別注意富文本與XSS的區(qū)分,嚴格禁止所有的危險標簽及事件,原則上應當使用白名單過濾標簽、事件及屬性。

跨站點請求偽造(CSRF)

跨站點請求偽造(Cross Site Request Forgery,簡稱CSRF)。由于重要操作的所有參數(shù)都是可以被攻擊者猜到,攻擊者即可偽造請求,利用用戶身份完成攻擊操作,如發(fā)布文章、購買商品、轉賬、修改資料甚至密碼等。

常見發(fā)生位置:所有由用戶(包括管理員)發(fā)起的操作點。

防御措施:
  • 輔助驗證方法:使用驗證碼。驗證碼是對抗CSRF攻擊最簡單有效的方法,但會影響用戶的使用體驗,并且不是所有的操作都可以添加驗證碼防護。因此,驗證碼只能作為輔助驗證方法。
  • 通用防護方法:添加足夠隨機的CSRF_TOKEN并每次更新,以防止參數(shù)被猜解。使用CSRF_TOKEN是目前通用的防護方法。
  • 其他防御措施:驗證HTTP Referer,拒絕不安全的來源。但服務器并非在任何情況下都能獲取到Referer值。
說明 建議結合上述三種方法進行防御。