1. 程式人生 > >web session token 和 防跨域攻擊

web session token 和 防跨域攻擊

主要是想推薦一下這篇:

實現一個靠譜的Web認證

下文是看過後自己的理解。順便說下這個人的其他文章也很贊。

session 和 token

session id 比較常見,就不多說了,這裡先科普下無狀態的token驗證:

幹掉狀態:從session到token
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