로그인/세션 쿠키, Ajax 및 보안
클라이언트 측 쿠키를 인증하고 설정하는 Ajax 기반 로그인 폼의 가장 안전한 방법을 결정하려고 합니다.다음과 같은 XSS 공격에 대해 알고 있습니다.
Http Only cookie는 AJAX 요청에서 어떻게 작동합니까?
그리고.
http://www.codinghorror.com/blog/archives/001167.html
그래서, 내 핵심 질문은...
1) pure ajax를 사용하여 쿠키를 설정하는 경우 가장 안전한 방법(http Only + SSL + 암호화 값 등)은 무엇입니까?
2) Pure Ajax 메서드는 cookie 클라이언트 측을 설정하는 것입니까?이거 안전한가요?
3) 이 방법으로 쿠키를 설정하는 것은 모든 주요 브라우저/OS에서 신뢰할 수 있습니까?
4) 숨겨진 IFrame을 사용하는 것이 더 안전합니까(Web 페이지를 호출하여 쿠키를 설정)?
5) 가능하다면 이 코드(PHP는 내 백엔드)를 가지고 있는 사람이 있습니까?
목표는 쿠키를 설정하여 페이지를 벗어나지 않고 다음 호출 시 사용할 수 있도록 하는 것입니다.
나는 이 일을 하기 위한 가장 안전한 방법을 정말로 확정하고 싶다.최종적으로 이 코드는 오픈 소스로 만들 예정입니다.상업용 코드는 사용하지 말아 주세요(또는 일반인의 감시를 받을 수 없는 것은 없습니다).
고마워, 토드
세션이 클라이언트를 서버에 바인드하기 때문에 cookie를 서버 측에서 생성해야 합니다.따라서 어떤 단계에서는 토큰 교환이 서버에서 클라이언트로 전송되어야 합니다.클라이언트는 신뢰할 수 없는 리모트머신이기 때문에 cookie 클라이언트 측을 생성하는 것은 그다지 도움이 되지 않습니다.
AJAX 콜 중에 cookie를 설정할 수 있습니다.서버(및 네트워크)에 대해서, AJAX 콜은 단순한 HTTP 콜이며, 서버의 HTTP 응답에 의해서 cookie 를 설정할 수 있습니다.따라서 AJAX 콜에 응답하여 세션을 시작할 수 있으며 cookie는 정상적으로 클라이언트에 의해 저장됩니다.
따라서 페이지의 폼에서 POST에 의존하는 것과 마찬가지로 AJAX를 사용하여 로그인 프로세스를 수행할 수 있습니다.서버는 쿠키를 동일하게 보고 서버가 쿠키를 설정하면 브라우저가 쿠키를 저장합니다.
기본적으로 클라이언트 측 Javascript는 쿠키의 가치를 알 필요가 없습니다(그리고 알 수 없는 것이 보안에 더 좋습니다.이것은 최신 브라우저가 인정하는 "httponly" 쿠키 확장자를 사용하여 달성할 수 있습니다).클라이언트에서 서버로의 HTTP 콜은 일반 페이지 요청인지 AJAX 요청인지에 관계없이 자동으로 해당 쿠키가 포함되며, 이는 http only로 표시되어 브라우저가 해당 확장자를 따르는 경우에도 마찬가지입니다.스크립트가 쿠키를 '인식'할 필요는 없습니다.
HTTPS(HTTP over SSL)를 사용하면 전송 중인 정보를 읽거나 서버를 가장할 수 없으므로 암호 또는 기타 중요한 정보의 일반 텍스트 전송을 방지할 수 있습니다.또, 네트워크 베이스의 공격으로부터도 보호할 수 있습니다.단, CSRF에 의해서 발생하는 모든 것에 대해 면역이 되는 것은 아닙니다.또, 세션 고정이나 XSS 등으로부터는 전혀 보호되지 않습니다.따라서 HTTPS를 사용할 경우 모든 문제를 해결할 수 있다고 생각하지 않습니다.사이트 간 스크립팅과 사이트 간 요청 위조에 대해 여전히 주의해야 합니다.
(참조 1. 그것들을 조합한 것 같습니다.
서버가 HTTP 응답 헤더로 cookie를 설정하고 있기 때문에 신뢰할 수 있습니다.단, 크로스 브라우저와 호환되도록 하려면 AJAX를 사용할 수 없는 경우에도 로그인이 가능한지 확인해야 합니다.이를 위해서는 Javascript가 없거나 AJAX를 사용할 수 없는 경우에만 표시되는 대체 방법을 구현해야 할 수 있습니다.(주의: 2014년에는 AJAX에 대한 브라우저 지원에 대해 더 이상 걱정할 필요가 없습니다.)
그렇다고 해서 보안이 바뀌는 것은 아닙니다.이전에 AJAX를 '시뮬레이션'하기 위해 사용된 숨겨진 iframes를 본 적이 있는 것 이외에는 그럴 필요가 없습니다.즉, 서버에 비동기 콜을 발신하는 것입니다.기본적으로는 어떤 방법으로 하든 상관없습니다.서버가 쿠키를 설정하기 때문에 클라이언트는 AJAX에 의해 쿠키를 받아들이거나 반환할 것입니다.
대부분의 경우 AJAX를 사용하든 사용하지 않든 실제 보안은 서버 측에서 발생하므로 보안에는 큰 영향을 주지 않습니다.서버에 대한 AJAX 콜은 비 AJAX 콜과 마찬가지로 신뢰할 수 없습니다.따라서 AJAX를 사용하지 않을 때와 마찬가지로 세션 고정 및 로그인 CSRF 및 XSS와 같은 세션 전체에 영향을 미치는 문제에 대해서도 알아야 합니다.AJAX를 사용해도 문제는 실제로 바뀌지 않습니다.다만, 테크놀로지에 익숙하지 않거나 복잡한 경우는, 테크놀로지의 실수가 많아질 가능성이 있습니다.
2014년 9월 회답 갱신
언급URL : https://stackoverflow.com/questions/661599/login-session-cookies-ajax-and-security
'codememo' 카테고리의 다른 글
| jsx 코드 형식이 올바르지 않은 이유는 무엇입니까? (0) | 2023.04.03 |
|---|---|
| Fiddler's Request Builder를 사용하여 JSON 요청을 할 수 있습니까? (0) | 2023.04.03 |
| Angular-CLI를 사용하여 컴포넌트를 생성하여 특정 모듈에 추가 (0) | 2023.04.03 |
| 검출되지 않은 오류:불변 위반: find ComponentRoot(......$110):요소를 찾을 수 없습니다.이것은 아마도 DOM이 예기치 않게 변환되었음을 의미합니다. (0) | 2023.04.03 |
| POST를 angularj로 전송하려면 어떻게 해야 하나요? (0) | 2023.03.29 |