노트 :
많은 사람들이 "비공개"URL과 인증을 혼동하는 것 같습니다. 또한 신뢰할 수있는 엔터티를 통해 링크를 보내는 것이 이중 인증 시도라는 혼동이있는 것 같습니다. 분명히, 우리는 추측하기는 어렵지만 공개적으로 접근 가능한 자원에 대해 이야기하고 있습니다.
개인 URL을 사용할 때는 항상 URL이 손상 될 수 있다고 가정해야합니다. URL이 손상 되더라도 리소스가 공격자에게 정보를 유출하지 않도록 그러한 URL을 설계해야합니다.
추측하기 어려운 개인 URL은 암호 기반 인증과 동일하지 않습니다. 본질적으로 비공개 URL은 전혀 비공개가 아니며 공개적으로 액세스 가능한 리소스입니다. '비공개'URL이라는 용어는 잘못된 단어라고 생각합니다.
"비공개"URL을 사용하는 것이 허용되는 경우가 있지만 암호 인증 또는 키 기반 인증과 같은 기존 인증 방법보다 기본적으로 안전하지 않습니다.
내가 자주 사용하는 "비공개"URL은 다음과 같습니다.
- 비밀번호 재설정 이메일
- 인증서 생성 이메일
- 계정 / 이메일 확인 이메일
- 구매 한 콘텐츠 (전자 책 등) 제공
- 비행기 탑승 수속, 인쇄 탑승권, 기타 전통적인 URL 외에도 개인 URL을 사용하는 기타 기타 사항
여기서 공통점은 임의 URL은 일반적으로 한 번의 작업에만 적합하다는 것입니다. 또한 기존 인증과 임의 URL 은 상호 배타적이지 않으며 실제로는 리소스를 제공 할 때 추가 보안을 제공하기 위해 서로 함께 사용될 수 있습니다.
Robert Harvey가 지적했듯이 임의 / 비공개 URL을 안전하게 사용하는 유일한 방법은 페이지를 동적으로 생성하고 사용자가 반 인증 된 것으로 간주 될 수 있도록 URL을 사용자에게 제출하는 것입니다. 이메일, SMS 등이 될 수 있습니다.
임의로 생성 / 비공개 URL에는 일반적으로 몇 가지 속성이 있습니다.
- 적당한 시간이 지나면 만료됩니다
- 일회용 URL이어야합니다. IE 처음 액세스 한 후에 만료됩니다.
- 사용자의 인증을 신뢰하는 다른 엔티티에 대한 사용자의 인증을 연기해야합니다. (이메일이나 SMS 등을 통해 링크를 보내면)
- 현대의 컴퓨터는 리소스를 노출시키는 API를 제한하거나 추측 할 수없는 충분한 엔트로피를 가진 URL 엔드 포인트를 생성함으로써 만료 전 타임 프레임에서 URL을 무차별하게하는 것은 불가능합니다.
- 사용자에 대한 정보를 유출해서는 안됩니다. IE : 페이지가 비밀번호를 재설정하는 경우 : 요청자 계정 정보가 페이지에 표시되지 않아야합니다. Alice가 비밀번호 재설정 링크를 요청하고 Bob이 URL을 추측하는 경우 Bob은 자신이 재설정중인 비밀번호를 알 수있는 방법이 없어야합니다.
- 사용자에 대한 정보가 유출되는 경우 기존 인증 위에 사용해야합니다. 예를 들어, 쿠키가 설정되어 있거나 session_id가 여전히 유효한 경우 페이지에서 사용자를 인증 된 것으로 간주 할 수 있습니다.
리소스마다 다른 수준의 보안이 필요합니다. 예를 들어, 친구와 비밀 레시피를 공유하려면 무작위 / 비공개 URL을 사용하여 공유 할 수 있습니다. 그러나 리소스를 사용하여 누군가의 신원을 도용하거나 다른 서비스 제공 업체와의 계정을 손상시킬 수 있다면 해당 리소스에 대한 액세스를 제한하는 데 훨씬 더 관심이있을 것입니다.