2010-07-15 2 views
3

나는 HTTPS를 사용하지만 누군가 다른 사람이 실제로 최근에 사용하는 세션 ID로 자신의 쿠키를 만드는 악의 위험을 최소화하고자합니다.PHP 세션 하이재킹 - HTTPS로 충분합니까? 지문 제안?

세션 변수에 만료 시간이 있으므로 세션이 최근에 사용되지 않았 으면 무효화됩니다. 따라서 피해자가 활성 상태이거나 최근 로그 아웃하지 않고 사이트를 떠날 때 기회가있는 것으로 나타났습니다.

나는 엄청난 양의 트래픽을 기대하지 않으며 세션 ID를 생성하는 표준 PHP 방법을 사용합니다. 나는 누군가의 "위험"이 실제로 누군가의 세션을 가로 챌 때 성공하거나 심지어 시도한다고 믿는다.

원격 사용자를 어떻게 든 식별하려면 없이없이 $_SERVER['REMOTE_ADDR']을 사용하는 것이 좋습니다. 내 생각에 공격자가 유효한 세션 ID 인 과 실제 사용자의 다른 속성 인 가장을 가장해야합니다.

사용자가 로그인 할 때 인증서를 사용하고 싶지 않습니다. 할머니와 같은 다른 비 기술적 인 사람들을 위해 모든 표준 웹 브라우저에서 작동하고 싶습니다.

그래서 내가 원했던 것은 다음과 같습니다. 사용할 수있는 HTTPS 세션의 "속성"이 있습니까? 유용할까요? 그렇다면 어떻게 찾을 수 있습니까? phpinfo()은 HTTPS와 관련이 없습니다. (그것은 httpd 때문에 그것을 노출하지 않습니다가요?)

난 그냥 + HTTP_ACCEPTHTTP_USER_AGENT의 연결을 사용해야 + HTTP_ACCEPT_LANGUAGE + HTTP_ACCEPT_ENCODING + HTTP_ACCEPT_CHARSET 또는이 사용자 사이의 독특한 충분히로 가정 비슷한?

모든 답변에 매우 만족합니다. (하지만 StackOverflow에 대한 다른 질문에 대한 소개만으로 대답하기 전에 질문을 읽어보십시오.) 감사합니다!

+1

코딩을 시작하기 전에 모든 조사를 수행해야합니다. 세션 보안은 잘 알려진 문제이며, 다른 누군가가 잘 생각하고 테스트 한 솔루션을 가지고 있다면 먼저이를 사용하는 것이 좋습니다. –

+0

@Dana the Sane : 상대방의 코드가 당신보다 나은지 어떻게 알 수 있습니까? – symcbean

+0

@Dana the Sane : 나는 동의합니다. 그게 바로 제가 여기서 묻는 이유입니다. – MattBianco

답변

3

세션 쿠키에 secure 플래그와 http_only 플래그가 모두 설정되어 있는지 확인해야합니다. 또한 세션 고정 문제를 피하기 위해 사용자가 인증 할 때 session_id를 변경해야합니다.

지문을 인쇄 할 때 상대적으로 안전해야하지만 실제로 선택 사항이 아닙니다. 지문에 사용해서는 안되는 것이 많이 있습니다 (예 : CLIENT_ADDRESS). 그래서 제안하기가 쉽지 않습니다. 더 나은 뭔가.

위의 제안 사항 외에도 다른 잠재적 인 보안 문제를 조사하는 데 시간을 할애하는 것이 좋습니다.

C.

2

OWASP top 10의 공격이 클래스를위한 훌륭한 지원입니다. Specificlly 당신은이 세 가지에 대해 걱정할 필요가 :

A2: Cross-Site Scripting (XSS)

거의 모든 $ _SESSION 변수를 (또한 "세션 승마"로 알려진)

A3: Broken Authentication and Session Management.

A5: Cross-Site Request Forgery (CSRF)가 공격자에게 잘 알려져있다 임의의 값이 될 수 있습니다. 공격자가 이들 변수에 영향을 미치기는 쉽지 않으므로 이러한 변수를 점검 할 필요가 없습니다. 중요한 예외는 $_SERVER['remote_addr']이며 아파치의 TCP 소켓에서 직접 가져온 것이므로이 값을 스푸핑하거나 다른 방법으로 조작 할 수 없습니다. 그러나 공격자가 같은 네트워크 세그먼트 (예 : 카페에서 커피 한 잔을 마시고있는 경우)와 같은 경우 공격자는 동일한 IP 주소를 사용합니다.