2009-06-03 3 views
8

현재 문서 URL은 http : //127.0.0.1/foo이며 http : //127.0.0.1/bar에 대한 쿠키 값을 변경해야합니다. 문서의 URL이 foo이므로 document.cookie가 비어 있습니다. 현재로서는 쿠키 값을 읽고 싶습니다. 실마리가 있습니까?다른 경로에서 쿠키 가져 오기

답변

16

쿠키를 만들 때 경로를 'foo'대신 '/'로 설정하면 '/ foo', '/ bar'등 도메인의 어느 위치에서나 읽을 수 있습니다.

+0

btw이 링크는 도움이 될 수 있습니다. http://www.quirksmode.org/js/cookies.html –

+0

쿠키의 생성 및 경로를 변경할 수 없습니다. 그래서 foo에서 술집의 쿠키에 액세스하는 것은 불가능하다는 뜻입니까? –

+0

어쨌든 쿠키가 실제로 보호되지 않기 때문에 큰 보안 문제는 아닙니다. SOP가 경로를 무시하기 때문에 쿠키 경로는 의미있는 보안 장벽이 아닙니다. – Antimony

2

다른 경로에서 쿠키에 액세스 할 수 없습니다. 그렇지 않으면 보안 상 위험 할 수 있습니다. 내가 /bar을하고 생각할 수

있는 유일한 방법은 그 path=/ 때문에 (/foo 포함) /의 모든 페이지가 액세스 할 수있는 쿠키를 설정합니다.

3

JJ와 grawity에서 언급했듯이 페이지에서이 작업을 수행 할 수있는 방법은 없습니다. 그러나 해결 방법이 있습니다.

i. http://localhost/bar을 가리키는 iframe을 배치하십시오. 쿠키 값을 저장하는 "막대"페이지에 숨겨진 요소가 있습니다. (이 iframe을 1 * 1 크기로두면 보이지 않습니다).

ii. "foo"페이지에서 JavaScript를 사용하여 쿠키 값을 가져옵니다.

쿠키 값을 쓰는 데 비슷한 방법 (수정 포함)을 사용할 수 있습니다!

감사합니다.

Ramjee.

+0

인터넷에있는 사람이 쿠키를 가져 오지 못하게 하시겠습니까? – Antimony

12

/bar 안에있는 리소스에 지정되어있는 을 만들고이 프레임으로 크로스 프레임 스크립트를 만들 수 있습니다. 예 :

<iframe src="/bar/blank.html" id="barframe"></iframe> 

var barframe= document.getElementByIf('barframe'); 
var bardocument= 'contentDocument' in barframe? barframe.contentDocument : barframe.contentWindow.document; // IE compat 
alert(bardocument.cookie); 

쿠키 path= 실수 쿠키 이름 충돌을 방지하기 편리한 측정 한 것입니다. 다른 경로가 JavaScript 원본을 공유한다는 점을 감안할 때 이는 효과적인 보안 메커니즘이 아닙니다.

+3

+1은 쿠키 경로가 의미있는 보안 벽이 아님을 지적합니다. – Antimony

+1

경로는 보안 기능이 아닌 성능 기능입니다 ... "barframe.contentDocument"부분이 누락되었습니다. 고마워. +1. –

관련 문제