1、前言前端
在web中,使用Ajax調用API,撇開跨域不講,怎麼作安全驗證,防止別的網站調用呢?假設沒有作安全保障,任何用戶均可以直接訪問接口,這回暴露出極大的安全隱患。web
2、後端怎麼作?ajax
一、一些接口強制用戶必須登陸,經過查看sessionId來作判別,沒登陸則不返回數據或者返回401或者403;segmentfault
二、cookie校驗+session;後端
三、經過判斷refer,限制只容許某些域名下訪問;跨域
四、直接限制ip,簡單粗暴;安全
五、簽名加密參數,不過會增長服務器負載服務器
以上我理解的可能過於片面,真正的後端已經要進行更多的校驗;cookie
3、前端能夠怎麼作?session
主要是考慮身份認證
一、請求頭添加token
$.ajax({ type: "GET", url: "XXXXX", beforeSend: function(request) { request.setRequestHeader("token", "*********"); }, success: function(result) { } });
二、token怎麼來?
請求指紋
: 一個請求有不少指紋信息,好比說請求的url和url中的信息,('/books'),請求的ip,請求的UA,請求的標頭信息,等等。請求指紋來計算token的話,能夠保證無狀態特性。
依賴ip
: 對請求的客戶端 ip 值進行 hash 來做爲 token;這樣是沒有狀態的。
依賴session
: 這種方法很適用於web網站,就是當用戶登陸後,對用戶的請求根據用戶的信息生成 token 存放到 session 中。
下面是看網上的別人設計的,其實看具體設計了。
token = md5(IP + 隨機數 + 時間戳 + UID + 祕鑰);//這個祕鑰最好隨着版本更換
--------------------------------------之後想到再慢慢加了----------------------------------------
參考:
http://blog.jobbole.com/99816/
https://segmentfault.com/q/1010000002500378/a-1020000002502912