programing

Http Only cookie는 AJAX 요청에서 어떻게 작동합니까?

codeshow 2023. 3. 8. 21:36
반응형

Http Only cookie는 AJAX 요청에서 어떻게 작동합니까?

사이트에서 AJAX를 사용하는 경우 JavaScript에는 쿠키에 대한 액세스가 필요합니다.Http Only cookie는 AJAX 사이트에서 작동합니까?

편집: Microsoft는 HttpOnly가 지정되어 있는 경우 쿠키에 대한 JavaScript 액세스를 허용하지 않음으로써 XSS 공격을 방지하는 방법을 개발했습니다.파이어폭스는 나중에 이것을 채택했다.제 질문은 다음과 같습니다.StackOverflow 등의 사이트에서 AJAX를 사용하는 경우 Http-Only cookie가 옵션입니까?

편집 2: 질문 2.HttpOnly의 목적이 쿠키에 대한 JavaScript 액세스를 방지하는 것인데도 여전히 XmlHttpRequest 개체를 통해 JavaScript를 통해 쿠키를 가져올 수 있다면 HttpOnly의 목적은 무엇입니까?

편집 3: 다음은 Wikipedia에서 인용한 내용입니다.

브라우저는 이러한 쿠키를 수신하면 다음 HTTP 교환에서 통상대로 사용하지만 클라이언트 측 스크립트에 표시되지 않도록 되어 있습니다. [32] »HttpOnlyflag는 표준이 아니며 모든 브라우저에서 구현되지 않습니다.XMLHTTPRequest [[33]

는 그것을 한다.document.cookie「HttpOnly」는, 「HttpOnly」를 참조해 주세요., 오브젝트 수 것 에는 XMLHttpRequest의 cookie 값을 사용할 수 .Http Only http http http http http http http http http http http http http http?본적으로 키키키 것것것 것것?

예에서는, 저는 의 「아까운 사람」, 「아까운 사람」에 쓸 수 없습니다.document.cookie, 객체를 할 수

<script type="text/javascript">
    var req = null;
    try { req = new XMLHttpRequest(); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
    req.open('GET', 'http://stackoverflow.com/', false);
    req.send(null);
    alert(req.getAllResponseHeaders());
</script>

편집 4: 죄송합니다.즉, XMLHttpRequest를 StackOverflow 도메인으로 전송한 후 getAllResponseHeaders() 결과를 문자열에 저장하고 쿠키를 다시 추출하여 외부 도메인에 게시할 수 있습니다.Wikipedia와 Hakers는 이 문제에 대해 저와 같은 의견을 가지고 있는 것 같습니다만, 저는 재교육을 받고 싶습니다.

최종 편집:아, 두 사이트 모두 잘못된 것 같습니다. 사실 이건 FireFox의 버그입니다.IE6 및 7은 현재 Http Only를 완전히 지원하는 유일한 브라우저입니다.

제가 배운 모든 것을 다시 말씀드리자면:

  • HttpOnly는 IE7 및 FireFox의 document.cookie에 대한 접근을 모두 제한합니다(다른 브라우저에 대해서는 잘 모르겠습니다).
  • HttpOnly는 IE7의 XMLHttpObject.getAllResponseHeaders() 응답 헤더에서 쿠키 정보를 삭제합니다.
  • XMLHttpObjects는 발신기지 도메인에만 송신할 수 있기 때문에 cookie의 크로스 도메인 투고는 없습니다.

편집: 이 정보는 더 이상 최신 정보가 아닐 수 있습니다.

예, 이 기능에는 HTTP 전용 쿠키가 적합합니다.서버에 대한 XmlHttpRequest 요청은 계속 제공됩니다.

Stack Overflow의 경우 Cookie는 XmlHttpRequest 요청의 일부로 자동으로 제공됩니다.스택 오버플로 인증 프로바이더의 구현에 대한 자세한 내용은 알 수 없지만 쿠키 데이터는 자동으로 "투표" 컨트롤러 방식보다 낮은 수준에서 사용자의 ID를 확인하는 데 사용됩니다.

일반적으로 AJAX에는 쿠키가 필요하지 않습니다.기술적으로는 XmlHttpRequest 지원(또는 오래된 브라우저에서는 iframe Remoteing)만 있으면 됩니다.

그러나 AJAX 지원 기능에 보안을 제공하려는 경우 기존 사이트와 동일한 규칙이 적용됩니다.각 요청의 배후에 있는 사용자를 특정하는 방법이 필요하며, 이를 위해서는 거의 항상 쿠키가 사용됩니다.

이 예에서는 당신의 document.cookie에 쓸 수 없지만 XMLHttpRequest 객체를 사용하여 당신의 쿠키를 도용하여 내 도메인에 게시할 수 있습니다.

XmlHttpRequest는 도메인 간 요청을 하지 않습니다(정확한 이유로).

일반적으로 iframe remoting 또는 JSONP를 사용하여 cookie를 도메인으로 보내는 스크립트를 삽입할 수 있지만 HTTP-Only는 cookie를 다시 보호할 수 없으므로 쿠키를 보호합니다.

서버측에서 StackOverflow.com를 침해하지 않았다면 내 쿠키를 훔칠 수 없었을 것이다.

편집 2: 질문 2.Http-Only의 목적이 쿠키에 대한 JavaScript 액세스를 방지하는 것인데도 XmlHttpRequest 개체를 통해 JavaScript를 통해 쿠키를 가져올 수 있다면 Http-Only의 목적은 무엇입니까?

다음 시나리오를 고려해 주십시오.

  • 페이지에 JavaScript 코드를 삽입할 수 있는 방법을 찾습니다.
  • Jeff가 페이지를 로드하고 내 악성 JavaScript가 내 쿠키와 일치하도록 그의 쿠키를 수정합니다.
  • Jeff는 당신의 질문에 훌륭한 답변을 제출합니다.
  • 그가 자신의 쿠키 데이터 대신 내 쿠키 데이터와 함께 제출하기 때문에, 정답은 내 것이 될 것이다.
  • "나의" 훌륭한 답변에 투표하는군요.
  • 내 진짜 계좌가 요점을 알겠어.

HTTP-Only cookie의 경우 두 번째 단계는 불가능하기 때문에 XSS 시도를 저지할 수 없습니다.

편집 4: 죄송합니다.즉, XMLHttpRequest를 StackOverflow 도메인으로 전송한 후 getAllResponseHeaders() 결과를 문자열에 저장하고 쿠키를 다시 추출하여 외부 도메인에 게시할 수 있습니다.Wikipedia와 Hakers는 이 문제에 대해 저와 같은 의견을 가지고 있는 것 같습니다만, 저는 재교육을 받고 싶습니다.

맞아요.그래도 세션 하이잭은 가능합니다.XSS 해킹도 성공적으로 실행할 수 있는 많은 사람들을 상당히 줄일 수 있습니다.

그러나 예제 시나리오로 돌아가면 HTTP-Only가 클라이언트의 쿠키를 수정해야 하는 XSS 공격을 성공적으로 차단할 수 있는 위치를 알 수 있습니다(흔하지 않은 경우).

요약하면 a) 어떤 개선으로도 모든 취약성을 해결할 수 없고 b) 어떤 시스템도 완전히 안전하지 않다는 것입니다.HTTP-Only는 XSS에 대한 백업에 유용한 도구입니다.

마찬가지로 XmlHttpRequest의 교차 도메인 제한이 모든 XSS 부정 이용을 막는 데 100% 성공하지는 않더라도 제한을 제거할 생각은 없습니다.

네, Ajax 기반 사이트에서 사용할 수 있는 옵션입니다.인증 쿠키는 스크립트에 의한 조작이 아니라 서버에 대한 모든 HTTP 요청에 브라우저에 의해 포함됩니다.

스크립트는 세션쿠키에 대해 걱정할 필요가 없습니다.인증되어 있는 한 사용자 또는 스크립트에 의해 시작된 서버에 대한 요구에는 적절한 쿠키가 포함됩니다.스크립트 자체가 쿠키의 내용을 알 수 없다는 사실은 중요하지 않습니다.

인증 이외의 목적으로 사용되는 쿠키의 경우 스크립트에서 이러한 쿠키를 수정하거나 읽을 수 있도록 하려면 HTTP 전용 플래그를 사용하지 않고 설정할 수 있습니다.예를 들어 UI 기본 설정(정렬 순서, 왼쪽 창 축소 여부)과 같이 중요하지 않은 모든 쿠키를 선택하여 선택할 수 있습니다.

저는 HTTP 전용 쿠키를 매우 좋아합니다.이것은 매우 훌륭한 아이디어였던 독자 사양의 브라우저 확장 기능 중 하나입니다.

꼭 그렇지는 않아요, 무엇을 하고 싶은지에 따라 다르죠.좀 더 자세히 말씀해 주시겠어요?AJAX는 쿠키에 액세스 할 필요가 없습니다.AJAX 콜이 실행하는 페이지 요구는 쿠키 데이터에 액세스하여 Javascript가 쿠키에 직접 액세스하지 않아도 호출 스크립트로 되돌릴 수 있습니다.

서버의 관점에서 보면 AJAX 요구에 의해 요구된 페이지는 기본적으로 사용자가 링크를 클릭함으로써 이루어지는 표준 HTTP get 요구와 다르지 않습니다.user-agent, ip, session, cookie 등의 모든 일반 요청 속성이 서버로 전달됩니다.

이게 더 있어요.

Ajax는 쿠키를 엄격하게 요구하지는 않지만 다른 포스터에서 언급한 것처럼 유용할 수 있습니다.모든 브라우저가 쿠키를 지원하는 것은 아니지만 공통적인 회피책이 있기 때문에 cookie를 스크립트에서 숨기기 위해 HTTP를 마킹하는 것은 부분적으로만 작동합니다.

XMLHTTP response 헤더가 cookie를 제공하는 것은 이상합니다.기술적으로는 서버가 cookie를 응답과 함께 쿠키를 반환할 필요는 없습니다.클라이언트에 설정되면 만료될 때까지 설정된 상태로 유지됩니다.그러나 재사용을 방지하기 위해 요청 시마다 쿠키를 변경하는 방식이 있습니다.따라서 XMLHTTP 응답에 cookie를 제공하지 않도록 서버를 변경하면 이 회피책을 피할 수 있습니다.

그러나 일반적으로 HTTOnly를 사용할 때는 주의를 기울여야 한다고 생각합니다.공격자가 XMLHTTP를 사용하지 않고 다른 사이트에서 발신된 Ajax와 같은 요청을 사용자에게 제출하도록 조정하고 브라우저의 활성 쿠키가 요청을 인증하는 사이트 간 스크립팅 공격이 있습니다.

AJAX 요청이 인증되었는지 확인하려면 요청 자체와 HTTP 헤더에 cookie가 포함되어 있어야 합니다.예를 들어 스크립트 또는 고유한 숨김 입력 사용.HTT Pointly는 그것을 방해할 것이다.

일반적으로 HTTPOnly를 원하는 흥미로운 이유는 웹 페이지에 포함된 서드파티 콘텐츠가 쿠키를 훔치는 것을 방지하기 위함입니다.그러나 타사 콘텐츠를 포함하는데 매우 신중하고 적극적으로 필터링해야 하는 흥미로운 이유가 많이 있습니다.

쿠키는 AJAX 호출 시 브라우저에 의해 자동으로 처리되므로 Javascript가 쿠키를 가지고 장난칠 필요가 없습니다.

따라서 JavaScript는 당신의 쿠키에 접근할 필요가 있다고 생각합니다.

브라우저로부터의 모든 HTTP 요청은 해당 사이트의 쿠키 정보를 전송합니다.JavaScript는 쿠키를 설정 및 읽을 수 있습니다.쿠키는 정의상 Ajax 응용 프로그램에 필요한 것은 아니지만 대부분의 웹 응용 프로그램에서 사용자 상태를 유지하기 위해 필요합니다.

"AJAX를 사용하는 경우 JavaScript에 쿠키 액세스가 필요합니까?"라는 질문에 대한 공식 답변은 "아니오"입니다.예를 들어 Ajax 요청을 사용하여 자동 제안 옵션을 제공하는 향상된 검색 필드를 생각해 보십시오.이 경우 쿠키 정보는 필요하지 않습니다.

아니요, AJAX 콜이 요구하는 페이지는 쿠키에도 액세스 할 수 있습니다.이 페이지는 로그인 여부를 체크합니다.

Javascript로 다른 인증도 가능하지만, 저는 신뢰하지 않습니다.백엔드에 인증 체크를 하는 것을 항상 선호합니다.

네, 쿠키는 Ajax에게 매우 유용합니다.

요청 URL에 인증을 넣는 것은 잘못된 방법입니다.지난 주 구글 캐시에서 URL에 있는 인증 토큰을 얻는 것에 대한 뉴스가 있었습니다.

아니요, 공격을 막을 방법은 없습니다.이전 브라우저에서는 여전히 Javascript를 통해 쿠키에 대한 간단한 액세스를 허용합니다.http만 바이패스 할 수 있습니다.당신이 생각해낸 것은 무엇이든 충분히 노력하면 충분히 할 수 있다.요령은 가치가 있기 위해 너무 많은 노력을 기울이는 것이다.

사이트의 보안을 강화하려면(완벽한 보안은 없습니다) 만료되는 인증 쿠키를 사용할 수 있습니다.그런 다음 쿠키를 도난당한 경우 공격자는 쿠키가 만료되기 전에 쿠키를 사용해야 합니다.그렇지 않은 경우 해당 계정에서 의심스러운 활동이 있을 수 있습니다.기간이 짧을수록 보안에 도움이 되지만 서버의 키 생성 및 유지보수에 많은 부하가 걸립니다.

언급URL : https://stackoverflow.com/questions/27972/how-do-httponly-cookies-work-with-ajax-requests

반응형