1、xss(跨站腳本攻擊):富文本、評論
利用站點開放的文本編輯並發布的功能,輸入並執行js腳本,竊取cookie等敏感信息。
預防方法:
方法一:cookie添加httpOnly屬性,這是使用js是不能讀取和操作cookie的。
方法二:在cookie中添加校驗信息。
方法三:對用戶輸入進行編碼(encode)、過濾(移除style、script、iframe相關節點)、校正()
js編碼解碼: 1、使用參數時,使用encodeURIComponent 2、進行url跳轉時,使用encodeURI 3、js使用數據時,使用escape
2、csrf(跨站請求偽造):支付扣款
偽造用戶的請求,冒充用戶在站內進行操作。
方法一:使用referer來判定來源頁面
方法二:關鍵操作只接受post請求,因為get請求的參數攜帶在url中,很容易模擬。
方法三:在http請求中加上token,並在服務器端驗證這個token。
方法四:登錄、支付的頁面加上一些用戶互動,比如驗證碼,確保當前請求是用戶發起的。
兩者的區別:
1、xss不需要登錄;csrf需要用戶先登錄獲取到cookie;
2、xss是在網站A注入js代碼,然后執行js代碼,達到篡改網站A的內容;
csrf利用網站A的漏洞,去請求網站A的api。
Cookie和Token都存需要放在Header里面,為什么只劫持前者?
1、http是無狀態的,為了使域名下的所有網頁能共享某些數據,因此出現了session、cookie以及token。
2、cookie是用於記錄用戶狀態的一種方式,裝有sessionId,由服務端設置,存儲在客戶端在每個請求中會自動攜帶。
3、token是無狀態的,用戶信息都被加密到token中,服務器收到token后解密就可以知道是哪個用戶,token不會在請求中自動攜帶,而需要手動添加。
cookie:用戶點擊了鏈接,cookie未失效情況下,后端以為是用戶的正常操作,於是進行扣款等操作。
token:用戶點擊鏈接,由於瀏覽器不會自動帶上token,即使發了請求,但是后端token驗證不通過。
