大家可能對防止CSRF攻擊的token方法并不陌生,據我的理解,程序應該是如下:
1. 瀏覽器端(客戶端)先登錄某一網站,比如:www.myweb.com/index.asp,并通過身份驗證(具體程序省略)。
2. WebServer(服務器端)生成一個名為:myToken=“12345678”的token,并發送給客戶端。
3. 客戶端保存以上token,存于本地的cookie中。
4. 客戶端在后續訪問服務器的請求中,帶上以上token引數,具體的,可以把token作為一個URL引數,形如:www.myweb.com/index.asp?id=xxx&myToken=12345678; 或者是可把token以HTTP Header的形式發送。
我的問題是:客戶端,也就是瀏覽器端,是如何做到以上第4步的,即:客戶端如何從cookie獲取某一項(如上面的myToken),并把它作為引數(或者存于HTTP header中),繼而發送給服務器的? 不知道是不是要寫特定的代碼實作相應的功能?謝謝!
uj5u.com熱心網友回復:
登錄時向后臺發送賬號密碼進行驗證,驗證通過回傳給你tokenuj5u.com熱心網友回復:
cookie中的東西 會自動帶到后端 讓他自己cookie中取就是了uj5u.com熱心網友回復:
你沒仔細看我的問題,是token如何單獨通過引數或者http header發給server,而不是cookie自動上傳,通過cookie自動上傳的,沒法防CSRF攻擊。
uj5u.com熱心網友回復:
你沒仔細看我的問題。我問的不是server如何回傳token,而是client端如何通過引數或者http header發送給server.
uj5u.com熱心網友回復:
請求攔截里添加
uj5u.com熱心網友回復:
登錄時向后臺發送賬號密碼進行驗證,驗證通過回傳給你token
你沒仔細看我的問題。我問的不是server如何回傳token,而是client端如何通過引數或者http header發送給server.
或者封裝請求時 給請求頭直接加
uj5u.com熱心網友回復:
myToken=“12345678”把這個傳給服務器有三種方法。
1.第一種就是直接讀取cookies,request.cookies("保存本地的cookies檔案名")
2.地址欄引數,比如你訪問addnews.asp這個頁面,addnews.asp?myToken=12345678,這個頁面就要通過request("myToken")獲取
3.表單里傳遞,表單里放一隱藏欄位<input type="hidden" name="myToken" value="https://bbs.csdn.net/topics/12345678">,<form action="addnews.asp" >,addnews.asp這個頁面就要通過request("myToken")獲取
uj5u.com熱心網友回復:
myToken=“12345678”
把這個傳給服務器有三種方法。
1.第一種就是直接讀取cookies,request.cookies("保存本地的cookies檔案名")
2.地址欄引數,比如你訪問addnews.asp這個頁面,addnews.asp?myToken=12345678,這個頁面就要通過request("myToken")獲取
3.表單里傳遞,表單里放一隱藏欄位<input type="hidden" name="myToken" value="https://bbs.csdn.net/topics/12345678">,<form action="addnews.asp" >,addnews.asp這個頁面就要通過request("myToken")獲取
我不確定這是不是我要的答案,其實我們的問題是:客戶端,即瀏覽器這一邊,是如何生成帶token的URL的,比如:客戶端在后續的訪問中,要訪問:addnews.asp?myToken=12345678,這個網址,那我的問題是:這個網址是如何生成的?特別是其中token的部分?
我的問題強調的是客戶端向服務器發送的帶token的URL是如何生成的,而不是服務器收到這個網址后,如何決議這個URL。
uj5u.com熱心網友回復:
服務器端獲取這些值也可以單獨寫成為一個檔案,include一下,每個頁面頭部參考一下。
myToken=“12345678”
把這個傳給服務器有三種方法。
1.第一種就是直接讀取cookies,request.cookies("保存本地的cookies檔案名")
2.地址欄引數,比如你訪問addnews.asp這個頁面,addnews.asp?myToken=12345678,這個頁面就要通過request("myToken")獲取
3.表單里傳遞,表單里放一隱藏欄位<input type="hidden" name="myToken" value="https://bbs.csdn.net/topics/12345678">,<form action="addnews.asp" >,addnews.asp這個頁面就要通過request("myToken")獲取
我不確定這是不是我要的答案,其實我們的問題是:客戶端,即瀏覽器這一邊,是如何生成帶token的URL的,比如:客戶端在后續的訪問中,要訪問:addnews.asp?myToken=12345678,這個網址,那我的問題是:這個網址是如何生成的?特別是其中token的部分?
我的問題強調的是客戶端向服務器發送的帶token的URL是如何生成的,而不是服務器收到這個網址后,如何決議這個URL。
myToken=12345678
這個值具體如何生成,應該是保密的東西,只有你知道才對。
當然你可以這樣做,取當前用戶名+當前日期+安全碼(具體自己設定,比如AX@123_1),比如用戶名是iamxx,今天是2020-5-15
,組合起來應該是這樣一串字符:iamxx20200515AX@123_1,這個字串什么時候生成,等你用戶名和密碼驗證通過生成,可以保存到資料庫。客戶端也按照這樣辦法去組合生成,然后通過地址欄傳遞過去,跟保存在資料庫里的值進行比對,一致說明是安全的。
當然這個字串實際使用需要加密,否則誰都能看見。
加密方法很多,MD5,DES,AES,SHA1,RSA,你選擇一種。
例如myToken=iamxx20200515AX@123_1,iamxx20200515AX@123_1經過sha1加密就是:myToken=a7e82df8b06172950243d8aa2064ac3c2478230f,這樣誰都不知道你怎么生成的,你客戶端也進行sha1加密,那么客戶端跟服務器端就應該一模一樣了,可以判斷是否安全。
uj5u.com熱心網友回復:
如果是登錄使用,字串組合可以包含用戶名,判斷哪個用戶發起的請求,如果只是預防是否合法途徑過來的,可以把域名包含在里面,正常訪問的地址應該可以生成你制定的加密字串,非法途徑登錄的應該不知道你的加密字串,所以判斷不合法。前提它沒有破解你的加密方法,你可以把加密組合和特殊字符安全碼再復雜點,這樣做API介面,授權的通過你制定加密辦法過來,驗證通過合法,驗證不通過不合法。uj5u.com熱心網友回復:
1.token在cookie里 在瀏覽器下次訪問的時候 會自動帶上 無需寫一行代碼。2.發送的時候token在URL或者Header里 這種肯定需要寫JS代碼,比如ajax
發送的時候可以設定header的。
防御CSRF的重點不在發送的時候token在哪。
重點是回傳的時候token在哪。就是讓想干壞事的人獲取token的難度怎樣最大化。
一般情況下 你把token放在header回傳 壞人是肯定獲取不到token的。
因為JS有跨域之說。瀏覽器會自動攔截的。
還有可以設定token的有效期很短,禁止跨域訪問等等來防御CSRF
uj5u.com熱心網友回復:
你的問題就是拿到token之后怎么放是吧,其實上面已經有人給出答案了,做請求攔截,亦或者路由守衛,在里面加入token,至于加在哪里,這就是看你自己怎么寫了一般情況下都是自己封裝在request這個請求檔案里的,我貼一部分我的請求攔截 你應該能看懂
// request攔截器
service.interceptors.request.use(
config => {
//此處進行token等資料處理
config.headers = {
"Content-Type": "application/json;charset=UTF-8"
};
var token = Cookies.get("token");
config.headers["Authorization"] = `Bearer ${token}`;
return config;
},
error => {
// Do something with request error
Promise.reject(error);
}
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/32047.html
標籤:ASP
