토큰 매개 변수가있는 https URL : 얼마나 안전합니까?


90

당사 사이트에서는 사용자의 개인 정보 (양식을 통해 제공)를 기반으로 시뮬레이션을 제공합니다. 우리는 그들이 로그인 / 비밀번호 계정을 만들도록 강요하지 않고 나중에 시뮬레이션 결과를 다시 얻을 수 있도록하고 싶습니다.

우리는 그들에게 결과를 되돌릴 수있는 링크가있는 이메일을 보내는 것을 생각했습니다. 하지만 당연히이 URL을 보호해야합니다. 개인 데이터가 위험에 처하기 때문입니다.

따라서 URL에 토큰 (예 : 문자와 숫자의 조합 40 자 또는 MD5 해시)을 전달하고 SSL을 사용하려고합니다.

마지막으로 다음과 같은 이메일을 받게됩니다.

안녕하세요, https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn에서
결과를 다시 가져옵니다.

당신이 그것에 대해 어떻게 생각하십니까? 충분히 안전합니까? 토큰 생성에 대해 어떤 조언을 해주시겠습니까? https 요청에서 URL 매개 변수를 전달하는 것은 어떻습니까?


답변:


98

SSL은 전송중인 쿼리 매개 변수를 보호합니다. 그러나 이메일 자체는 안전하지 않으며 이메일은 목적지에 도달하기 전에 여러 서버를 따라 반송 될 수 있습니다.

또한 웹 서버에 따라 전체 URL이 로그 파일에 기록 될 수 있습니다. 데이터의 민감도에 따라 IT 직원이 모든 토큰에 액세스하는 것을 원하지 않을 수 있습니다.

또한 쿼리 문자열이 포함 된 URL이 사용자 기록에 저장되어 같은 컴퓨터의 다른 사용자가 URL에 액세스 할 수 있습니다.

마지막으로 이것이 매우 안전하지 않은 이유는 URL이 모든 리소스, 심지어 타사 리소스에 대한 모든 요청의 Referer 헤더로 전송된다는 것입니다. 예를 들어 Google Analytics를 사용하는 경우 Google에 URL 토큰을 모두 전송합니다.

제 생각에는 이것은 나쁜 생각입니다.


1
HTTP-referer 문제에 대해 생각하지 않았지만 URL 링크가 결과 페이지로 리디렉션되고 적절한 페이지가 아닙니다 (Google 분석 또는 기타 타사 스크립트 없음).
Flackou

5
대부분의 브라우저는 HTTPS에서 HTTP로 이동할 때 리퍼러를 제거하지 않습니까?
Kevin Mark

2
이것은 사용자 활성화 (또는 비밀번호 재설정) 링크와 유사합니까? 그렇다면 그 사건을 어떻게 처리해야합니까? 많은 웹 사이트에서 재설정 URL을 이메일로 전송합니다. POST는 클릭 할 수 있어야하므로 옵션이 아닙니다. 감사합니다.
pinkpanther

3
그래서 해결책은 무엇입니까?
RT

1
URL의 토큰이 api 요청에 사용 된 토큰과 동일하지 않고 1 시간 만 지속된다면 어떻게 될까요?
user1709076

14

나는 그것을 위해 쿠키를 사용할 것입니다. 워크 플로는 다음과 같아야합니다.

  1. 사용자가 처음으로 귀하의 사이트를 방문합니다.
  2. 사이트에서 쿠키를 설정
  3. 사용자가 데이터를 입력합니다. 데이터는 쿠키에 저장된 일부 키를 사용하여 DB에 저장됩니다.
  4. 사용자가 퇴사하면 https : 링크가 포함 된 이메일을 보냅니다.
  5. 사용자가 돌아 오면 사이트는 쿠키를 발견하고 사용자에게 이전 데이터를 제공 할 수 있습니다.

이제 사용자는 다른 컴퓨터에서 다른 브라우저를 사용하려고합니다. 이 경우 "전송"버튼을 제공합니다. 사용자가이 버튼을 클릭하면 "토큰"을 얻게됩니다. 그녀는 다른 컴퓨터에서이 토큰을 사용하여 쿠키를 재설정 할 수 있습니다. 이런 식으로 사용자는 토큰을 얼마나 안전하게 전송할지 결정합니다.


4

SSL은 전송중인 데이터의 콘텐츠를 보호하지만 URL이 확실하지 않습니다.

어쨌든 공격자가 해당 URL 토큰을 재사용하는 것을 완화하는 한 가지 방법은 각 토큰을 한 번만 사용할 수 있도록하는 것입니다. 합법적 인 사용자가 링크를 계속 사용할 수 있도록 쿠키를 설정할 수도 있지만 처음 액세스 한 후에는 쿠키가있는 사람에게만 작동합니다.

사용자의 이메일이 손상되고 공격자가 먼저 링크를 얻는다면, 당신은 망할 것입니다. 그러나 사용자에게는 더 큰 문제가 있습니다.


11
URL이 전송되기 전에 SSL 연결이 보호됩니다.
David

1

전자 메일은 본질적으로 안전하지 않습니다. 누군가 해당 링크를 클릭하여 데이터에 액세스 할 수 있다면 실제로 보호하는 것이 아닙니다.


정확하지만 많은 사이트가 그것에 대해 신경 쓰지 않고 메일로 로그인 / 비밀번호를 보냅니다. 그러나 모방을하는 이유는 ... 아니다
Flackou

모방 할 이유가 없다는 데 동의하지만 일반적으로 처음 로그인 한 후 비밀번호를 변경하라고합니다.
Jason Punyon

1

토큰은 SSL을 통해 전달 될 때 안전합니다. 당신이 겪게 될 문제는 URL을 볼 수 있다는 점에서 사람들 (그것이 의도하지 않은 사람들)이 사용할 수 있다는 것입니다.

SSN과 같은 개인 정보라면 이메일로 URL을 보내지 않을 것 같습니다. 차라리 사이트에 대한 사용자 이름과 비밀번호를 생성하도록하고 싶습니다. 당신과 그들에게 위험에 처한 그런 종류의 정보로 이메일을 손상시키는 것은 너무 쉽습니다. 누군가의 계정이 훼손되면 그게 진짜 누구의 잘못인지 의문을 갖게 될 것입니다. 엄격한 CYA 관점에서 더 안전할수록 더 좋습니다.


1
당신이 옳아 요 : URL이 인스턴스의 브라우저 기록에 남아있을 것입니다
Flackou

0

심각한 개인 정보 문제가있는 상황에서는 충분히 안전하다고 생각하지 않습니다. (아마도 일반 텍스트) 이메일로 URL을 전송한다는 사실이 가장 약한 링크입니다. 그 후에는 토큰에 대한 무차별 대입 공격의 위험이 있으며 (실제 인증 메커니즘의 구조가 없음) 잘 구성된 사용자 이름 및 암호 설정보다 취약 할 가능성이 높습니다.

우연히 https 요청의 매개 변수에는 전혀 문제가 없습니다.


무차별 대입 공격의 위험에 대해 당신 말이 맞습니다. 이런 유형의 공격으로부터 봇을 어떻게 막을 수 있을지 모르겠습니다. 금지 "고집"IP는 충분한 보호가되지 않습니다. 주제에 대한 아이디어가 있습니까?
Flackou

사실, 우리가 말하는 키 공간의 종류로 if (this_ip_number_has_requested_an_invalid_token_today ()) sleep (5); load_simulation 스크립트에서 완벽하게 보호 할 수 있습니다. (속도 제한은 좋은 인증 메커니즘의 이러한 기능 중 하나입니다.)
혼돈

답변 해 주셔서 감사합니다. 그러나 동일한 봇이 다른 IP를 쉽게 취할 수 있다고 생각하여 IP 속도 제한이 충분하지 않습니다. 내가 잘못?
Flackou

그것들을 얻는 것은 IP 당 하나의 지연되지 않은 시도입니다. IP 주소 공간은 쉽게 사용할 수 없으므로 도움이됩니다.
chaos

0

그렇기 때문에 그것은 나쁜 생각 일 것입니다. 쉬운 사용으로 보안을 위협 할 것입니다. 앞서 말했듯이 SSL은 서버와 클라이언트 브라우저 간의 정보 전송 만 보호하고 중개자 공격 만 방지합니다. 이메일은 매우 위험하고 안전하지 않습니다.

정보에 액세스하기위한 사용자 이름과 암호 인증이 가장 좋습니다.

나는 쿠키 아이디어를 다소 좋아합니다. 쿠키 정보도 암호화해야합니다. 또한 공격 가능성을 제한하기 위해 솔트 및 키 구문과 $ _SERVER [ 'HTTP_USER_AGENT']가 포함 된 토큰을 생성해야합니다. 확인 사용을 위해 쿠키에 클라이언트에 대한 중요하지 않은 정보를 최대한 많이 저장합니다.

쉽게 사용할 수 있도록 핵심 문구를 쿠키에 저장할 수 있지만 쿠키도 도난 당할 수 있습니다.

클라이언트가 그가 제공 한 핵심 문구를 입력하도록하는 것이 더 좋습니다.이 문구는 그의 데이터와 함께 데이터베이스에 저장됩니다.

또는 사용자가 $ _SERVER [ 'HTTP_USER_AGENT'] 매개 변수가 다른 다른 시스템을 사용하거나 단순히 쿠키를 놓친 경우 키를 사용할 수 있습니다. 따라서 쿠키를 전송하거나 설정할 수 있습니다.

또한 데이터베이스에서 민감한 데이터가 암호화되어 있는지 확인하십시오. 당신은 몰라요;)


-1

해커가 데이터베이스에 액세스하면 많은 개인 정보를 자유롭게 제공 할 수 있다는 것을 알고 있습니까?

그 후에 나는 이것이 생각만큼 나쁘지 않다고 말할 것입니다. MD5 또는 SHA1은 해싱에 매우 안전하지 않으므로 사용하지 않습니다. 그들은 아주 쉽게 "복호화"될 수 있습니다 (암호화가 아니라는 것을 알고 있습니다).

그렇지 않으면 이메일 종류의 암호로 전송되지 않는 두 번째 정보를 사용할 수 있습니다. 그 이유는 아주 간단합니다. 만약 누군가가 사용자의 이메일에 접근한다면 (당신이 세션을 죽이지 않는다면 핫메일을 사용하면 아주 쉽습니다) 그는 사용자가 보낸 모든 정보에 접근 할 것입니다.

HTTPS는 사이트에서 최종 사용자에게 전송 된 데이터를 보호하고 암호화합니다. 다른 것은 없습니다. 이보다 덜한 것은 없습니다.


어떤 의미에서 솔트 된 SHA1 해시는 정확히 어떻게 해독됩니까?
Eli

"해커가 데이터베이스에 액세스하면 많은 개인 정보를 자유롭게 제공 할 수 있다는 것을 알고 계십니까?" 예,하지만 모든 웹 사이트에서 문제가되지 않습니까?
Flackou

@Flackou 예,하지만 페이팔의 db에 액세스하면 모든 것이 암호화 된 명확하게 저장된 신용 카드 정보를 찾을 수 없습니다. @Eli는 : theregister.co.uk/2005/02/17/sha1_hashing_broken
에릭

-1

내가 당신의 아이디어에 대해 이해 한 바에 따르면, 이론상 누군가는 임의의 40 자 문자열이나 MD5 해시를 입력하고 다른 사람의 세부 정보를 얻을 수 있습니다. 이것은 가능성이 거의 없지만 한 번만 발생하면됩니다.

더 나은 해결책은 사용자에게 토큰을 보낸 다음 이름, 우편 번호, ssn 또는 이들의 조합과 같은 세부 정보를 입력하도록 요청하는 것입니다.


5
SSN? 진심이야? 어쨌든 40 개의 임의의 문자열이 몇 개 있는지 수학을 해보는 것이 좋습니다. 그것은 더보다는 다만 "희박"입니다
엘리

맞습니다. URL에 이메일과 같은 다른 매개 변수를 추가해야합니다 (a..z + A..Z + 0..9 = 62 자이고 62 ^ 40이 상당히 큰 숫자 인 경우에도).
Flackou

여러분, 62 ^ 40은 우주의 원자 수보다 훨씬 더 많습니다. 말 그대로 추측 할 수 없습니다.
Eli

1
얼마나 많은 사람들이이 숫자의 규모를 이해하지 못하는지 놀랐습니다. 만약 당신이 1 초에 백만개의 토큰을 추측한다면, 당신이 히트를 받기 전에 태양이 타 버릴 가능성이 훨씬 더 높습니다
Eli

4
리차드, 당신이 보통 생일 패러독스라고 부르는 것을 지적하시는 것 같군요. 중요한 것은 가능한 조합의 수뿐 아니라 그 중 얼마나 많이 사용되는지입니다. 음,이 경우 62 ^ 40 조합 중 약 2 ^ 119를 사용해야 기회가 중요해집니다.
erickson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.