2011-01-20 3 views
8

나는 PHP가 유니 코드를 지원하는 방법을 배우는 데서 시간을 들여서 "Remember Me"쿠키를 좀더 안전하게 만드는 것에 관심을 보였습니다. 그러나 내가 이해하지 못하는 몇 가지 사실과 내 자신의 생각에 대해 몇 가지 제안과 의견을 제시하고자합니다.PHP : 내 계정 및 보안을 기억하십니까?

1) 쿠키를 사용하지 않는 "내 정보 기억"기능을 채택 할 방법이 있습니까? 인증 쿠키 저장시 명백한 보안 결함이 있기 때문에 궁금합니다. 모든 것에 대해 보안 위험은 없습니다.

2) 은행이나 "매우 민감한"정보로 작업하지 않으므로 사용자가 더 많은 "고급 프로필"영역을 위해 암호를 입력하도록 요구해야합니까? 로그인을 기억하는 것은 2 분 후에 어쨌든 본질적으로 로그인하도록 요청하면 낭비가 될 것입니다.

3) 인증 쿠키를 저장하는 가장 좋은 방법은 무엇입니까 ("전혀 아님"제외). 나는 현재 쿠키 (시간(), 사용자 에이전트, remote_addr 및 salt-sha256을 사용하여 해시 됨)에 단일 토큰을 설정하도록 해당 영역을 코딩했습니다. 사용자가 다시 돌아 오면 토큰에 대한 '세션'테이블을 확인한 다음 IP를 IP와 일치시켜 로그인합니다. 토큰이 있지만 IP가 일치하지 않으면 쿠키가 설정되지 않고 로그인하라는 메시지가 표시됩니다 그들이 없으면.

다시 한 번 감사드립니다.

+0

- (어떤 쿠키의 값에서 중요한 것은 그것이 임의의 것을, 그래서 당신은 당신의 세대 방법 덜 예측 가능하도록 변경한다고 여기 지점을 오해) 가능할 때마다, 실제로, 그것은 복잡합니다. 예를 들어 https://github.com/delight-im/PHP-Auth를 살펴보십시오. 클라이언트 측에서 수행하려는 작업에 필요한 영구 저장소가 필요하므로 쿠키가 이상적인 선택입니다. – caw

답변

6
  1. 본질적으로, 아니오. 클라이언트 측에서 일종의 저장 장치가 필요합니다. 쿠키없이 클라이언트가 누구인지 알 수있는 방법이 없습니다 (또는 HTML 5 클라이언트 측 저장소와 비슷한 방식).

  2. 이는 사용자가 결정해야하는 트레이드 오프입니다. 최소, 이전 암호 또는 다른 형식의 확인 (전자 메일?)은 새로운 것으로 변경해야합니다.

  3. 모든 통신을 암호화하지 않으면 쿠키 도용과 후속 위장을 절대적으로 보호 할 수 없습니다. 그게 유일한 안전한 방법입니다. 쿠키에 IP, 사용자 에이전트 등을 연결하는 것이 도움이 될 수 있지만 암호화에 의존하는 것이 훨씬 쉽고 안전합니다. 당신은 기존 인증 프레임 워크를 다시 사용해야합니다

+0

1) 그렇게 생각하지는 않았지만 어쨌든 급진적 인 아이디어를 요구할만한 가치가 있다고 생각했습니다. ;) 2) 전자 메일, 사용자 이름, 암호 등의 정보를 업데이트하려면 이전 암호를 반드시 입력해야합니다. 주로 물건을 구입하거나 (예 : 게임 사이트이므로 사용자는 그런 옵션을 갖게됩니다), 다른 사용자들, 그런 종류의 것. 3) 실제로 암호화 또는 암호화가 아닌 저장/검사 시스템 (처음의 작업에 따라 작동하는 방식)을 언급했습니다. – Zydeco

+0

@Zyd Ah IP, 사용자 에이전트 등이 일치하면 특정 쿠키 만 받아 들였다는 것을 알았습니다. 쿠키의 유일한 요구 사항은 충분히 무작위 적이므로 추측 할 수 없다는 것입니다. 사용하는 방법은 예측할 수 없기 때문에별로 좋지 않습니다. 소금이 충분히 크다면이를 상쇄 할 수 있습니다. 어쨌든, 당신은 그것을 바꿔야 만합니다. – Artefacto

+0

더 명확하게 : HTTPS를 사용하고 대부분의 쿠키 하이재킹을 피할 수있는 쿠키에 'secure' 플래그를 설정합니다 (사용자의 컴퓨터가 손상되지 않은 경우 제외). – deceze