JS의 document.cookie에서 쿠키에 액세스 할 수 없지만 브라우저에 쿠키가 있음이 표시됨


79

JavaScript에서 쿠키에 액세스 할 수 없습니다. 사용자 지정 검사를 위해 일부 값을 읽고 JSON을 통해 보내야합니다.

다음에서 설명한 것처럼 JS에서 쿠키에 액세스하려고했습니다.

코드에서 볼 수 있듯이 다음에는 수정처럼 명확하게 보입니다.

var c_value = document.cookie;

document.cookieChrome의 웹 디버거에서 값 에 액세스하려고 할 때 Watch 표현식에 빈 문자열 만 표시됩니다 .

그래서 필요한 쿠키 값을 읽을 수 없습니다.

관련 값을 얻기 위해 보내는 쿠키 이름이 올바른지 확인했습니다. 또한 관심이 있다면 쿠키를 얻기 위해 W3Schools 소스 코드를 사용하고 있습니다 (하지만 두 번째 링크에서 기술은 비슷합니다).

문제를 어떻게 해결할 수 있습니까?


1
@PeeHaa 정말? 모르겠어요. ASP.NET MVC 4 (Razor) 프로젝트에서 작업 중이며 기본적으로이 매개 변수를 활성화하는 것을 지원하는지 모르겠습니다. 나에게 화 내지 마세요 :) 저는 웹 개발의 초보자입니다.

2
브라우저에서 쿠키를 검사하면 httponly인지 아닌지 표시되어야합니다.
PeeHaa

1
@PeeHaa Chrome 웹 도구의 쿠키 뷰어 테이블에 HTTP 열이 있는지 검사했는데 내 쿠키가 HTTP 전용이라는 의미입니까? 그렇다면, 내 프로젝트에서 사용하는 HTTP 쿠키 만 나는 내 문제 :( 해결하는 방법을 이해하지 않아도

1
@PeeHaa 네, 그런 컨트롤이 있습니다. 쿠키는 서버 측 응답으로 설정됩니다. ASP.NET MVC4 프로젝트에서 C #을 사용하고 있습니다. 내가 쿠키를 설정하는 부분 : ideone.com/fBqtke

1
@PeeHaa 그래서, 당신은 그것을 고치는 방법에 대한 제안이 있습니까? 지금 인터넷 검색 중입니다. 모든 웹 사이트는 document.cookie, Chrome의 웹 도구를 사용하여 내 모든 쿠키를 표시하고 Http 열 아래에 확인합니다. 에서 액세스 할 수없는 이유는 무엇 document.cookie입니까?

답변:


129

httponly쿠키를 다룰 가능성이 높습니다 . httponly쿠키에 설정할 수있는 플래그로 JavaScript로 액세스 할 수 없습니다. 이는 악성 스크립트가 민감한 데이터 또는 전체 세션으로 쿠키를 훔치는 것을 방지하기위한 것입니다.

따라서 httponly플래그 를 비활성화 하거나 자바 스크립트로 데이터를 가져 오는 다른 방법을 찾아야합니다.

코드를 살펴보면 http 전용 플래그를 쉽게 비활성화 할 수 있습니다.

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

이제 JavaScript에서 쿠키 정보에 액세스 할 수 있습니다. 그러나 나는 당신이 어떤 종류의 데이터를 얻으려고하는지 정확히 알지 못하므로 대신 다른 접근 방식을 사용할 수 있으며 예를 들어 쿠키를 읽는 대신 필요한 정보로 페이지에서 일부 데이터 속성을 렌더링 할 수 있습니다.

<div id="example" data-info="whatever data you are trying to retrieve"></div>

console.log(document.getElementById('example').getAttribute('data-info'));

또한! 그건 그렇고 HttpOnly가 실제로 보호하지 않으며 설정되지 않을 수 있다는 몇 가지 정보를 찾았습니다. 당신이 그것에 대해 어떻게 생각하십니까?

httponly는 silverbullet이 아닙니다. 그러나 특정 유형의 공격으로부터 사용자를 보호합니다. owasp.org/index.php/HttpOnly
PeeHaa

3

http 만 첫 번째 범인이라고 말하고 싶지만 쿠키 범위를 설정하지 않으면 발생할 수도 있습니다.

사이트가 다른 도메인에서 리디렉션 된 경우 쿠키 범위 설정을 조사해야합니다. 도메인 및 경로는 쿠키가 전송되어야하는 URL의 쿠키 범위를 정의합니다. 이에 따라 응답에 쿠키가 표시되지 않을 수 있습니다.

성공적인 SAML SSO 로그인에 쿠키를 설정할 때이 문제가 발생했으며 요청의 일부로 전송되지 않았기 때문에 문서에서 쿠키를 검색 할 수 없습니다.


3

쿠키는 경로 아래의 하위 디렉토리에만 표시되므로 쿠키의 경로 속성도 주시하십시오. 문제가 발생하여 경로 "/"설정을 해결했습니다.


1

나는 같은 문제가 여러 번 있었다. 그리고 매번 다른 이유가있었습니다.

다른 이유 :

  • httpOnly분야의 문제 . 로 설정되었고 false콘솔에서 액세스하려고했습니다. 그것을 설정 true하거나 소스 코드에서 액세스하는 것이 트릭을 수행했습니다.
  • secure분야의 문제 . 그것은 truehttp 만 사용하고있었습니다.
  • 의 문제 Expires / Max-Age. 쿠키가 오래되어에서 볼 수 없습니다 document.cookie.


0

보안 인증을 사용하는 경우 보안 때문에 쿠키에 직접 액세스 할 수 없습니다. 아래 코드를 사용하여 서버 측에서 일부 응답 속성을 변경해야합니다.

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

그러나 보안이 비보안으로 변경 될 수 있으므로 쿠키를 삭제하고 일부 작업을 수행 할 수 있도록 서버 측에서 수행 할 솔루션을 찾아야합니다.

서버 측에서 변경이 가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.