2012-02-19 193 views
2

如問題所述,如果它是HttpOnly,那麼您是否可以找出Javascript中是否存在cookie?我不需要訪問它裏面的信息,只知道它有一個。檢查Javascript中是否存在httponly cookie

關於這種情況的更多信息是,最初有一個Web服務器使用cookie作爲身份驗證令牌,並且它被設置爲httponly,因爲它沒有被客戶端使用,所以它被添加到安全性中。

但是,現在需要更改客戶端是否需要知道它是否具有Cookie(因爲該網站可以在用戶未登錄的情況下工作,但是如果他們已登錄(auth cookie將存在)該網站需要顯示某些內容並隱藏其他內容

Web服務器上還存在其他安全預防措施,因此在客戶端具有不正確的身份驗證Cookie的情況下沒有任何危害,但該網站使它看起來像是登錄,因爲它會刪除cookie並拒絕用戶。

+1

你不能改變服務器端代碼的認證狀態傳達給客戶端作爲頁面創建的一部分? – Neil 2012-02-19 22:22:11

+0

確實沒有服務器端代碼,它是一個純粹的html/javascript網站,它也允許用戶登錄到localStorage之外的持久信息(這是web服務器啓動的地方)。最初客戶在訪問網站之前需要登錄,但是現在用戶可以在不使用localStorage登錄的情況下使用整個網站。這個調用來發現cookie是否存在是否顯示登錄框以及是否登錄其他遠程功能。 – Grofit 2012-02-19 22:34:07

回答

4

否。並參見Rob的評論如下。

看到這,你可能已經看到了 - http://en.wikipedia.org/wiki/HTTP_cookie#Secure_and_HttpOnly

的餅乾的HttpOnly通過非HTTP方法是無法訪問的,通過JavaScript如 呼叫(例如,引用「的document.cookie」)...

編輯:刪除undefined響應,我寫的,你可能沒有使用:)

+0

「它會返回undefined'」? Cookies是通過'document.cookie'獲得的,它是一個始終存在的字符串。 HttpOnly cookie只是不顯示,但它絕對不是「'undefined」「 – 2012-02-19 22:01:59

+0

」我的意思是如果你嘗試訪問它並獲得返回值。對? – Mike 2012-02-19 22:02:37

+0

JavaScript中的Cookie必須通過'document.cookie'上的字符串操作獲得。例如,'document.cookie'可以看起來像'value = woow%20;值2 =另一%20woot'。要找到其鍵名爲「value」的cookie的值,可以使用(示例):'var test = /(?:;\s*|^)?woow=([^;]*)/.exec (document.cookie);'如果cookie存在,你可以通過'test [1]'得到值。如果它不'test === null',並且嘗試'test [1]'會拋出'null'錯誤。 – 2012-02-19 22:09:01

0

您可以間接地檢查,看看是否存在嘗試將其設置爲使用JavaScript值的腳本,如果它不能b e設置,那麼HTTP Only Cookie必須存在(或者用戶阻止cookie)。

function doesHttpOnlyCookieExist(cookiename) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (1000)); 
    var expires = "expires=" + d.toUTCString(); 

    document.cookie = cookiename + "=new_value;path=/;" + expires; 
    if (document.cookie.indexOf(cookiename + '=') == -1) { 
     return true; 
    } else { 
     return false; 
    } 
} 

[更新18年2月6日]這在Firefox上不工作(在Chrome &邊緣,也許人的作品)