jwt防范xss攻擊的方法:
使用jwt驗證,由于服務端不保存用戶信息,因此不用做sessonid復制,同時用戶發請求給服務端時,前端使用JS將jwt放在header中手動發送給服務端,服務端驗證header中的JWT字段,而非cookie信息,這樣就避免了漏洞攻擊,例如jwt認證中token生成過程:
const crypto = require("crypto");
const base64UrlEncode = require("base64url");
//頭部信息
var header = {
"alg": "HS256", //簽名算法類型,默認是 HMAC SHA256(寫成 HS256)
"typ": "JWT" //令牌類型,JWT令牌統一為JWT
};
//負載信息,存儲用戶信息
var payload = {
"sub": "1234567890",
"name": "xiao jie",
"admin": true
}
//服務器秘鑰,用于加密生成signature,不可泄漏
var secret = "chaojidamantou";
//header部分和payload部分
var message = base64UrlEncode(JSON.stringify(header)) + "." + base64UrlEncode(JSON.stringify(payload));
//HMACSHA256加密算法
function HMACSHA256(message, secret) {
return crypto.createHmac('sha256', secret).update(message).digest("hex");
}
//生成簽名信息
var signature = HMACSHA256(message, secret);
//header和payload部分內容默認不加密,也可以使用加密算法加密
var JWT = message + "." + base64UrlEncode(signature);
console.log(JWT);