1. 程式人生 > >Web安全之CSFR與XSS

Web安全之CSFR與XSS

CSFR

CSFR(Cross-Site Request Forgery跨站點偽造請求)是一種網路攻擊方式。攻擊者在使用者已經登入目標網站之後,誘使使用者訪問一個攻擊頁面,利用目標網站對使用者的信任,以使用者身份在攻擊頁面對目標網站發起一些惡意請求(如惡意發帖、改密碼、發郵件等),達到攻擊目的。

攻擊過程

  1. 使用者開啟瀏覽器,訪問受信任網站A,輸入使用者名稱和密碼請求登入網站A。
    2.使用者資訊通過驗證後,網站A會產生Cookie資訊並返回給瀏覽器,此時使用者登入網站A成功,可以正常傳送請求。
  2. 使用者未退出網站A之前,在同一瀏覽器中,開啟一個惡意網站B。
  3. 網站B含有一些攻擊性程式碼,會發出訪問第三方站點A的請求。
  4. 瀏覽器在接收到這些攻擊性程式碼後,根據網站B的請求,在使用者不知情的情況下攜帶Cookie資訊,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據使用者的Cookie資訊以使用者的許可權處理該請求,導致來自網站B的惡意程式碼被執行。

檢測
使用工具抓取一個正常請求的資料包,去掉Referer欄位後再重新提交,如果該提交還有效,那麼基本上可以確定存在CSRF漏洞。

防範
1.驗證HTTP Referer欄位
Referer欄位記錄了該HTTP請求的來源地址。所以只需要給敏感請求增加一個攔截器來檢查Referer的值。
但是這種方法有漏洞,就是某一些瀏覽器可以篡改Referer的值。黑客可以篡改,就能通過驗證。

2.在請求地址中新增token並驗證
黑客之所以可以偽造使用者請求,是因為請求中所有的使用者驗證資訊都存在於cookie中,黑客可以利用使用者的cookie來通過驗證。
所以可以在請求中加入黑客無法偽造的資訊,並且該資訊不存在於cookie中。在HTTP請求中以引數的形式加入一個隨機產生的token,並在服務端建立一個攔截器來驗證這個token,如果請求中沒有token或token不正確,就會被認為是攻擊從而拒絕該請求。
token在使用者登入後產生並存放於session中,每次請求時把token從session拿出來與請求中的token比對。

XSS

XSS(CrossSiteScript跨站指令碼攻擊)攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML程式碼,當其它使用者瀏覽該網站時,這段HTML程式碼會自動執行,從而達到攻擊的目的。如,盜取使用者 Cookie、破壞頁面結構、重定向到其它網站等。

分為三種:
1.反射型XSS
是指發生請求時,XSS程式碼出現在請求URL中,作為引數提交到伺服器,伺服器解析並響應。響應結果中包含XSS程式碼,最後瀏覽器解析並執行。

2.儲存型XSS
通過發表帶有惡意跨域指令碼的帖子、文章、留言等,從而把惡意指令碼儲存在伺服器,每個訪問的人訪問的時候,伺服器把內容傳送過來並被瀏覽器解析,就會觸發執行攻擊。

3.DOM XSS
不同於反射型XSS和儲存型XSS,DOM XSS程式碼不需要伺服器端的解析響應的直接參與,而是通過瀏覽器端的DOM解析。
編寫JS程式碼時可能產生XSS漏洞,比如eval語句可以將一段字串轉換為JS語句。

防禦
對使用者輸入的資料進行轉義處理,如編碼、解碼、過濾。把輸入的不合法的部分過濾掉。