本文目錄一覽:
如何用js實現跨域獲取cookie
正常情況下,瀏覽器禁止跨域獲取cookie
一般通過sso服務可以實現取得跨域cookie,思路如下:
域A頁面訪問位於域A的伺服器,對許可權進行驗證
域A伺服器於域B伺服器通信,記錄一個唯一的加密串用作身份驗證域(並將cookie信息發送給域B伺服器)
域A伺服器返回302跳轉,跳轉到域B下,並將加密串作為url的一部分
頁面由域A跳轉到域B,域B伺服器通過加密串獲取到事先從域A伺服器上得到的cookie信息,並在響應頭中添加set-cookie欄位設置cookie
如何防止js獲取cookies值
瀏覽器是你自己的,你可以禁用很多功能 比例cookies 腳本 ActionX ····
關掉cookies 操作如下
瀏覽器安全設置 工具—— internet選項 隱私 ——安全級別 調高
如何檢測伺服器端的cookie是否被禁用
在伺服器端判斷,需要訪問伺服器2次
首先在a頁面設置一個Cookie
接著在b頁面請求這個Cookie,如果沒請求到,說明客戶端禁用Cookie了
禁用js也一樣,在a頁面用js設置一個值,提交到b頁面,b頁面獲取到了這個值,說明js啟用
否則js禁用了
nodejs怎麼設置cookie
var http = require(‘http’);
http.createServer(function (req, res) {
// 獲得客戶端的Cookie
var Cookies = {};
req.headers.cookie req.headers.cookie.split(‘;’).forEach(function( Cookie ) {
var parts = Cookie.split(‘=’);
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || ” ).trim();
});
console.log(Cookies)
// 向客戶端設置一個Cookie
res.writeHead(200, {
‘Set-Cookie’: ‘myCookie=test’,
‘Content-Type’: ‘text/plain’
});
res.end(‘Hello World\n’);
}).listen(8000);
console.log(‘Server running at ‘);
如果去掉其中幾句,就是官方給出的例子,除了表明返回一個頁面多簡單外,一點用也沒有。
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/plain’});
res.end(‘Hello World\n’);
}).listen(8000);
console.log(‘Server running at ‘);
我們通過http.createServer的回調來處理所有請求與響應,因此什麼有用的東西都在它們上面。Cookie位於req對象的headers對象上,為一個字元串,通常為了方便我們將它們轉換成一個對象。
寫入一個Cookie其實就是在首部設置一個鍵值對,上面是簡單方式,它實際上可以這樣:
res.writeHead(200, {
‘Set-Cookie’: [“aaa=bbb”,”ccc=ddd”,”eee=fff”],
‘Content-Type’: ‘text/plain’
});
但真正使用時,我們的Cookie並非這樣簡單的的格式:
Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]
console.log(‘Server running at ‘);
HttpOnly 屬性: 這是微軟對Cookie做的擴展。如果在Cookie中設置了”HttpOnly”屬性,那麼通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊。
var http = require(‘http’);
http.createServer(function (req, res) {
// 獲得客戶端的Cookie
var Cookies = {};
req.headers.cookie req.headers.cookie.split(‘;’).forEach(function( Cookie ) {
var parts = Cookie.split(‘=’);
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || ” ).trim();
});
console.log(Cookies)
// 向客戶端設置一個Cookie
res.writeHead(200, {
‘Set-Cookie’: ‘SSID=Ap4GTEq; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ‘,
‘Content-Type’: ‘text/html’
});
res.end(‘Hello World\nscriptconsole.log(document.Cookie)/script’);
}).listen(8000);
console.log(‘Server running at ‘);
然後多刷幾次頁面,我們發現我們還能在控制台看到SSID=Ap4GTEq這個屬性,但在前端我們看不到它(當然在firebug中能看到)。
Secure屬性: 當設置為true時,表示創建的 Cookie 會被以安全的形式向伺服器傳輸,也就是只能在 HTTPS 連接中被瀏覽器傳遞到伺服器端進行會話驗證,如果是 HTTP 連接則不會傳遞該信息,所以不會被竊取到Cookie 的具體內容。同上,在客戶端我們也無法在document.Cookie找到被設置了Secure=true的Cookie鍵值對。Secure屬性是防止信息在傳遞的過程中被監聽捕獲後信息泄漏,HttpOnly屬性的目的是防止程序獲取Cookie後進行攻擊。我們可以把Secure=true看成比HttpOnly更嚴格的訪問控制。
path屬性: 指定可訪問Cookie的目錄。例如:”userId=320; path=/shop”;就表示當前Cookie僅能在shop目錄下使用。
domain屬性: 指定可訪問Cookie的主機名.主機名是指同一個域下的不同主機,例如:和gmail.google.com就是兩個不同的主機名。默認情況下,一個主機中創建的Cookie在另一個主機下是不能被訪問的, 但可以通過domain參數來實現對其的控制,其語法格式為:”name=value; domain=CookieDomain”;以google為例,要實現跨主機訪問,可以寫為: “name=value;domain=.google.com”;這樣,所有google.com下的主機都可以訪問該Cookie。
Expires屬性:指定過期時間,格式為”name=value;; expires=GMT_String”; 其中GMT_String是以GMT格式表示的時間字元串,超過這個時間,Cookie將消失,不可訪問。例如:如果要將Cookie設置為10天後過期,可以這樣實現:
js cookie跨站問題
跨站設置cookie和獲取cookie這個在安全上是禁止的,不允許的。正常情況不會讓你人工獲取到的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246994.html