2011-12-16 2 views
1

쿠키 보안에 관해서는 stackoverflow 커뮤니티에서 실행하고 싶었지만 구현하기에는 너무 어려웠습니다. 사이트에서 사용자 로그인을 구현하는 것은 이번이 처음이며, 보안에 대해 매우 신중해야합니다. 즉, 계정이 계정에 침해 당할 염려가 없습니다.쿠키 보안

은 여기 내 가상 보안 솔루션입니다 :

  • 사용자 가입 한 사이트 (중 이메일 등록을 통해, 등 페이스 북, 로그인) 및 사용자 ID 번호가 지정되어 있습니다. 이 번호는 공개되어있어 사용자의 프로필에 액세스하거나 게시물에서 참조 할 수 있습니다.
  • 등록시 정보는 데이터베이스 (Google Fusion Tables에서 호스팅 됨)에 저장되므로 사용자에게 임의로 생성 된 ROWID도 할당됩니다. 이 ROWID 번호는 사용자에게 숨겨져 있으며 공개되지 않습니다.
  • 사용자 ID는 ROWID 번호에 대해 암호화되며이 번호는 사용자 컴퓨터의 쿠키에 저장됩니다. 다른 사용자가 볼 수있는 것은 아니며 이론 상으로는 사용자 만 볼 수 있습니다.

이 솔루션은 "비밀"키 (ROWID 번호), "소비자"키 (쿠키에 저장 됨) 및 공개 참조 ID (사용자 ID)를 허용합니다. 물론이 모든 것들이 사이트에 신속하게 액세스 할 수있는 데이터베이스에 통합되어 있습니다. 적절한 수준의 보안을 제공하거나 고려해야 할 것이 있습니까?

답변

5

XSS와 같은 쿠키 도용을 추가로 방지하려면 IP 주소마다 고유 한 쿠키를 발급 한 다음 쿠키가 해당 IP 주소에서만 사용 가능한지 확인하는 것이 좋습니다. 쿠키를 데이터베이스에 저장하는 경우 여러 쿠키가 동일한 사용자에게 매핑되므로 복잡한 일이 발생할 수 있습니다.

다음은 이러한 문제를 방지하는 방법은 다음과 같습니다

Set-Cookie: userName=Alice; authCode=eeba95a4... 

경우 : AUTHCODE = HMAC (ROWID 사용자 이름 + IPADDR)

이 쿠키를받을 때, 데이터베이스에서 사용자를 검색, 재 계산/요청의 ROWID와 IP 주소를 사용하여 쿠키의 authCode를 확인하십시오. 데이터베이스에 쿠키를 저장할 필요가 없습니다.

별도의 암호화 점을 들어, 믹스에 salt 매개 변수를 던져 : AUTHCODE = HMAC (ROWID 사용자 이름 + IPADDR + 소금)

소금 값이 모든 쿠키 무작위로 생성됩니다

Set-Cookie: userName=Alice; salt=59843...; authCode=eeba9... 

당신은 생산합니다.비밀로 할 필요가 없습니다.

+0

감사합니다. 이것은 매우 유용합니다! 나는 여전히 프로그래밍에 새로운 것이 일반적이므로, 심지어 이것조차도 전혀 존재하지 않는다! 이런 일을 사물에 적용하는 일을 확실히 할 것입니다! –

+0

+1 좋은 포인트. 실제로 해시에 실제 데이터를 추가하는 것을 고려해야하며 사용자가 쿠키를 검색하지 않아도 쿠키의 콘텐츠를 변경할 수 없도록해야합니다. –

1

이것은 좋은 질문입니다. 아직 답변이 없으므로 알려 주시기 바랍니다. 내가 볼 수있는 한 (나는 암호 전문가가 아니다) 이것은 이론적으로는 합리적인 것처럼 보인다. 악의적 인 사용자가 소비자 키를 얻는 경우 (그리고 어떤 방식 으로든 보호되지 않음) ROWID가 이미 사용자 ID를 알고 있기 때문에 무작위로 시도 할 수있는 한 가지 문제점이 있습니다. 따라서 적어도 암호화하기 전에 소금을 사용자 ID에 추가해야합니다. 또한 "소비자"키 ccokie는 암호화되지 않은 연결로 절대 이동하지 않도록 안전 모드로 전달되어야합니다.

하지만 모두 다른 키를 사용하려는 계획에 따라 다릅니다.

+0

분명히 고려해야 할 사항처럼 들립니다. 실제로이 글을 게시하고 생각할 시간을 더 갖고 나자 나는 등록 당시의 사용자 ID와 타임 스탬프의 조합을 암호화 키로 사용하는 것을 고려했습니다. 타임 스탬프가 공개 정보가 아니기 때문에 이것은 내 의견으로는 다른 보안 계층을 추가합니다. 어쩌면 나는 심지어 계산의 어떤 형태를 통해 타임 스탬프를 실행하여 무차별 공격이 더 많이 사용되는 것을 막을 수있다. 의견을 보내 주셔서 감사합니다! –