it-swarm-korea.com

세션 하이재킹-세션 ID 재생성

각 요청에서 세션 ID를 재생성하면 구현할 가치가있는 세션 하이재킹의 가능성이 완화됩니까?

세션 변수에 저장된 REMOTE_ADDR 대 REMOTE_ADDR에 대한 검사와 30 분의 비활성 시간 초과 및 지속적으로 변경되는 세션 ID를 결합하여 위험을 허용 가능한 수준으로 완화해야한다고 생각합니다.

또한 세션 ID를 다시 생성 할 때 다른 문제가 있습니까? 새로운 재생성마다 이전 세션을 명시 적으로 제거해야합니까?

마지막으로, 모든 요청에서 세션 ID를 다시 생성하면 대규모 배포에서 보안상의 이점을 정당화하기에는 너무 많은 자원을 소비하게됩니까?

17
Purge

이 접근 방식을 시도하고 웹 팜에서 리소스 문제 및 경쟁 조건을 유발할 수 있기 때문에이 접근법을 시도한 구현을 보았습니다. 처음에는 좋은 생각처럼 들리지만 재생성 프로세스가 너무 암호 집약적 인 경우 응용 프로그램이 서비스 거부 공격을 받기 쉽습니다. 주기적으로 세션 ID를 미리 생성하고 캐시를 사용 가능하게 유지해야하지만 캐시를 안전하게 관리해야합니다.

세션 ID 변수 보안에 대한보다 일반적인 해결책은

  • sSL 사용
  • 인증 된 세션 ID 만 생성 after SSL을 통한 로그인 성공, 그렇지 않으면 세션 수정에 취약 해집니다
  • 암호로 랜덤하고 추측 할 수없는 토큰을 생성
  • 세션 ID를 자주 만료
  • 로그 아웃시 서버 측이 올바르게 만료 된 후
  • 세션 ID 쿠키를 HttpOnly 및 '보안'으로 표시
12
Weber

이 모든 것을 구현하는 방법에 달려 있다고 생각하지만, 변경 가능한 세션 ID를 추적하는 런타임 문제가 발생할 수 있습니다.

도움이 되겠습니까? 실제로는 아닙니다. REMOTE_ADDR을 스푸핑하고 변경하기 전에 세션 ID를 포착하는 것은 매우 간단합니다. 사용자가 다른 요청을하기 전에이를 사용하여 사용하십시오.

더 나은 아이디어는 쿠키 값을 암호화하고 HTTPS를 통해서만 연결하고 쿠키 수명을 매우 짧게 설정하거나 세션 수명을 매우 짧은 것으로 설정하고 쿠키를 HttpOnly (JavaScript를 통해 액세스 할 수 없음)로 설정하는 것입니다 최신 브라우저 중 하나), 마지막으로 프레임 워크 세션 관리를 사용하십시오. :)

4
Steve

세션이 만료되고 토큰이 신뢰할 수 있고 무작위로 생성되는지 확인해야합니다.

그러나이 모든 대답에서 가장 강력한 요점은 SSL을 사용하는 것이지만 전체 세션에 사용하는 것입니다.

SSL을 통해 로그인하고 그때부터 일반 http를 사용하고 이후의 각 요청에서 세션을 재생성하고 위에서 언급 한 모든 좋은 일을 수행하더라도 실제로 사용자 세션을 어떤 식 으로든 하이재킹 할 수는 없습니다. 전체 세션을 전송하면 도청 및 도용 (SSL이 설계된 것)을 방지 할 수 있어야합니다.

NAT 주소 방화벽의 경우 원격 주소를 사용하는 것도 상당히 어리 석습니다.

특정 클라이언트의 머신이 로그인 할 수있는 유일한 머신인지 확인하기 위해 한 단계 더 나아가 야하는 경우, 클라이언트 인증서를 발행하여 사용자가 브라우저에로드 할 수 있으며 SSL 협상 중에 서버가이를 요청할 수 있습니다. .

1
Troy Rose

일반적인 사용법에서 내가 본 가장 좋은 것은 보안 로그인 후 세션 식별자를 다시 생성하고 클라이언트 컴퓨터와 식별자를 연결합니다. 응용 프로그램의 보안 래퍼는 동시 로그인을 확인합니다 (이전 로그인이 완료되고 ID가 만료 될 때까지 새 로그인을 허용하지 않음). 브라우저 닫기 또는 로그 아웃시 ID가 만료되고 만료 시간도 상당히 짧습니다 (10 분)

다른 보안 기능과 함께 시스템 과부하없이 목적 (온라인 소비자 뱅킹 애플리케이션)에 적합했습니다.

0
Rory Alsop