web session token 和 防跨域攻擊
阿新 • • 發佈:2018-11-09
主要是想推薦一下這篇:
下文是看過後自己的理解。順便說下這個人的其他文章也很贊。
session 和 token
session id 比較常見,就不多說了,這裡先科普下無狀態的token驗證:
幹掉狀態:從session到token
圖是從上面的連結中偷的。
總結下,就是:
login_handler(){
signature = hash(user_info, private_secret)
token = (user_info: signature)
send_to_client( token )
}
request_handler (){
token=receive_from_client()
signature = hash(user_info, private_secret)
if (token.signature != signature){
send_to_client("wrong signature")
return
}
// todo process request
}
XSS 和 CSRF
基本概念:
-
XSS(Crossing Site Script)
例子:壞蛋在某網站的可編輯部分注入指令碼,指令碼傳送資訊到壞蛋的伺服器後臺,壞蛋收集到網站的使用者資訊/cookie。
根源:網站沒有對使用者輸入的資訊做過濾。 -
CSRF(Crossing Site Recource Forge )
例子:壞蛋在他們自己網站上加入對某網站API的呼叫,由於瀏覽器會自動填充cookie資訊,所以如果網站後端只是用cookie認證,則API 會在使用者不知情的情況下被執行。比如使用者在不知情的情況下,向壞蛋轉賬了100塊。
根源:網站伺服器沒有拒絕跨域請求。傳統的post表單總是可以跨域(application/x-www-form-urlencoded)?
cookie 的三個屬性:
-
Secure;
只有https 請求,cookie才會被攜帶。避免http的問題。 -
HttpOnly;
用js 讀不到?只是會在傳送時自動攜帶。避免針對cookie的XSS -
Same-Site=strict;
只有在相同網站中才會填充cookie。避免CSRF