공개 대면 데이터베이스 ID를 가리거나 난독 처리하는 것이 실제로 "모범 사례"입니까?


23

사람들이 인터넷에서 여기저기서 강의하는 것을 들었습니다. 웹 애플리케이션에서 공개 데이터베이스 ID를 가리는 것이 가장 좋습니다. 나는 그것들이 주로 형태와 URL을 의미한다고 생각하지만, 주제에 대해 한 번도 읽지 못했습니다.

편집 : 물론, 이제 이것에 대해 물어 보면 주제에 대한 몇 가지 리소스를 찾습니다.

이 링크들은 나의 호기심을 만족 시켰지만, SO 게시물에는 많은 투표권이 없으며이 맥락에서 주제를 중심으로 할 필요는 없습니다. 링크는 가짜입니다. 나머지 게시물은 그대로 두겠습니다.


나는 모호함과 보안의 차이점과 두 사람이 함께 작동하는 방법을 이해하지만 이것이 왜 필요한지 상상할 수 없습니다.

이것에 대한 진실이 있습니까, 단지 편집증입니까, 아니면 완전히 가짜입니까?

나는 그것을 할 수있는 방법을 생각할 수 있지만 물론 응용 프로그램 코드에 많은 복잡성을 추가합니다. 어떤 상황에서 이것이 유용합니까? 이 경우 입니다 어떤 사람들은 자주하지, 어떻게 일반적으로 배포? 식별자 해시? 다른 것? 많은 추가 보안을 위해 많은 작업을하는 것처럼 보입니다. 나는 실제 솔루션을 찾고 있지 않고 사람들이 현실에서 어떻게 / 왜 그렇게 할 것인지에 대한 아이디어를 얻고 싶습니다.

이것이 실제로 "모범 사례"로 간주됩니까, 아니면 작은 가치의 미세 최적화입니까?

참고 : 일부 사람들은 잘못된 생각을했을 수도 있습니다. 추측하기 어려운 ID가 유일한 보안 메커니즘 일 것이라고 제안하지는 않습니다 . 일반적인 액세스 확인이있을 것입니다. 그것들이 제자리에 있고, 레코드의 ID 또는 해시 ID를 아는 것만으로는 액세스 권한을 부여하기에 충분하지 않다고 가정 해 봅시다.

답변:


28

나는 그것이 중요하다고 생각하지 않지만, 다른 결정에 따라 문제가 될 수 있는 시나리오가 있습니다 .

예를 들어, 순차적으로 생성 된 주문 ID를 노출하고 고객 지원 센터에 전화를 걸어 "이봐, 새 컴퓨터에 2000 달러를 썼는데 다른 사람의 주문을 보냈다"고 사회 공학 공격을 한 경우 15 달러짜리 케이블, 지금은 2000 달러에 나왔습니다. "당신은 가짜라고 결론을 내리거나 가짜 컴퓨터에 새 컴퓨터를 보내기 전에 문제를 조사하는 데 많은 시간을 할애 할 수 있습니다.

주제에는 비슷하지만 덜 정교하지만 창피한 변형이 있습니다. 악의적 인 사람이 주문 ID를 증가 시키면 영수증에 대한 이메일 링크가 표시되고 링크를 클릭 한 사람이 주문 ID를 볼 수있는 권한이 있는지 확인하기 위해 추가 검증이 이루어지지 않은 경우 갑자기 개인 고객 정보가 노출되는 경우 잘못된 사람에게.

이러한 경우, 숫자가 비 연속적이면 추측이 흥미로운 결과를 얻을 가능성이 적기 때문에 노출이 약간 완화됩니다. 반면, 이제 고객 지원 상호 작용에서 주문 ID를 참조 할 수있는 편리한 방법이 필요합니다. 이로 인해 전화 기반 고객 상호 작용과의 대화가 오래 걸리지 않으며 담당자가 B, PD 및 주문 번호 BPT2015D의 T

이 난독 화를 "모범 사례"라고 부르는 것은 신축 적이지만 특정 시나리오에서는 유효성 검사 또는 인증 코드에서 또 다른 취약점을 악용하기가 쉬워 질 수 있습니다. 반면에 누군가가 블로그 게시물 # 1 또는 # 2559를 작성했는지 알고 있는지는 중요하지 않습니다. 추가 지식이 있어도 ID가 중요한 정보가 아닌 경우 ID를 난독 처리한다는 주장은 가중치가 적습니다.

데이터베이스 식별자가 특정 데이터베이스 구현 (또는 인스턴스)으로 연결될 수 있으며 회사가 경쟁 업체를 인수하거나 인수 할 때 두 개의 레거시 시스템 또는 CEO를 병합해야한다는 두 번째 잠재적 논쟁이 있습니다. DynoCoreBase의 담당자와 술을 마시고 이제 모든 데이터를 DynoCoreBase 버전 13h로 옮기고 모든 기본 키를 안내하고 이전 ID를 새로운 것으로 변환하기 위해 일종의 매핑 계층을 만들어야한다고 결정합니다. 기존 URL이 깨지지 않도록 ID를 지정해야하지만 이러한 시나리오가 중요한지 여부는 일반적인 모범 사례보다 비즈니스 특성 (및 해당 ID와 관련된 고객)에 훨씬 더 의존합니다.


2
내 질문을 이해 한 유일한 사람인 것 같아 그것은 당신이 말하는 것처럼 "다른 약점을 쉽게 이용할 수있게 해줄 것"이라고 말할 수 있습니다. 그러나 그것은 어떤 가치입니까? 개인이 소금에 절인 해시와 같은 것을 실제로 내놓을 것이라고 결정한 사람이 있습니까? 나는 이것이 "전문적인 기술"이라고 생각했지만 실제로는 보지 못했다. (혹은 내가 알지 못했을 수도있다.) 당신이 말했듯이, ID만으로 알면 액세스 권한을 부여해서는 안됩니다 (일부 사람들은 그 부분을 놓쳤다 고 생각합니다. 그래서 나는 당신의 일반적인 평가에 동의합니다.
웨슬리 머치

9

이것은 내 취향입니다.

"모호함을 통한 보안"은 충분하지 않지만, 모호함 비록 조금이라도 보안 도울 수 있습니다 . 약간의 의사 보안이 응용 프로그램에 이와 같은 것을 배포하는 데 추가 노력을 기울일 가치가 있는지 결정해야합니다.

보안 이외의 다른 이유는 이것을 구현할 수 있습니다.

은둔

URL에서 사용자 ID를 처리한다고 가정 해 봅시다. Joe의 사용자 ID가 100Bob의 사용자 ID가 101인 경우 Joe의 계정이 먼저 생성 된 것 같습니다. 이것은 대부분의 응용 프로그램에서 중요하지 않지만 일부에는 중요 할 수 있습니다. 이것은 모호함을 통한 엄격하게 개인 정보 보호의 예 이므로, 사용자 ID를 난독 화하는 매우 정교한 시스템이 없다면 ID 3Js9kW3hTs7sa120를 가진 사용자가 id 를 가진 사용자보다 더 긴 계정을 가지고 있는지 알아내는 것이 쉽습니다 Q8Hs73kks0hEg.

내가 참조한 링크 에서 :

첫 번째는 일부 객체의 URL이 주어지면 객체 주위에 작성된 객체의 URL을 알아낼 수 있다는 것입니다. 이것은 데이터베이스의 객체 수를 가능한 경쟁자 또는이 정보를 갖고 싶지 않은 다른 사람들에게 노출시킵니다 ( 일련 번호를보고 독일 탱크 생산 수준을 추측하는 연합국에 의해 잘 알려져 있음 ).

자동 증분 ID를 사용하면 데이터베이스에있는 개체 수를 공개적으로 노출하고 처음 생성 된 개체와 최신 개체를 노출 할 수 있습니다. 이 정보는 비즈니스가 새롭거나 잘 수행되지 않는다는 사실을 알려줄 수 있습니다. 예를 들어, 책을 주문했는데 주문 ID가입니다 1. 주문이 시스템에서 첫 번째 주문 이었음을 알 수 있습니다. 돌아가서 다른 것을 주문하고 주문 ID가이라고 가정 해 봅시다 9. 이렇게하면 두 주문 사이의 시간 프레임에 7 개의 주문 만 있었다는 정보가 표시됩니다. 이것은 경쟁 업체에게 유용한 정보 일 수 있습니다. 이 경우 숫자 자동 증가 ID가 난독 처리되는 것이 좋습니다.


2

"Obscure"라는 단어는 여기에서 약간 오도 될 수 있으며 사람들이 "난독 화"또는 "부분적으로 숨기고"라고 생각하게 할 수 있습니다.

이러한 데이터베이스 레코드에 중요한 데이터가 포함 된 경우 내부적으로 생성 된 데이터베이스 키를 공개 URL의 일부로 포함하지 않는 것이 좋습니다.

URL의 숫자로 재생하고 다른 레코드에 액세스하는 것은 너무 쉽습니다.


1
예, 제목과 다른 몇 가지 사례를 난독 화하는 것을 의미했습니다. 죄송합니다. 내가 무엇을 의미하는지 알게되어 기쁘다. 나는 "숫자와 놀기"에 관한 것을 얻었지만 그것은 내 요점입니다. 여러분의 앱은 추측하기 어렵고 손가락을 건너는 것을 조금 더 어렵게하여 앱을 보호해서는 안됩니다. 누군가 착륙 /account/8hdy39s1lks062dfasd4하여 실제 계정에 매핑되면 어쨌든 액세스 할 수 없습니다.
웨슬리 머치

2

나는 주류에 대항하여 임의의 긴 식별자를 사용하는 것이 꽤 괜찮은 형태의 보안이라고 생각합니다.

비밀번호만큼 민감한 데이터에 액세스 할 수있는 사람에게 명확해야합니다. 물론 야생에 들어가면 변경하기가 더 어렵다는 단점이 있습니다.

그러나 일반적인 사용자 이름과 암호 쌍에 비해 몇 가지 장점이 있습니다. 첫째, 사용자는 선택의 여지가 없으므로 추측하기가 불가능하다는 것을 확신 할 수 있습니다. 관리자가 자신의 이름을 암호로 선택할 때 완벽하게 안전한 사이트를 디자인 할 필요는 없습니다. 둘째, 각 항목마다 식별자가 다르므로 한 항목에 액세스 할 수 있으면 다른 항목에는 도움이되지 않습니다.

물론 보안 계층이 많을수록 좋습니다. 그러나이 방법만으로도 몇 가지 자격 증명보다 더 안전 할 수 있습니다.


1
동의한다. 어떤 보안 방법을 사용하든 추측 할 수없는 바이트를 유선으로 전송합니다. 올바르게 수행하면 ID 공간에 대한 정보가 유출되지 않는 암호화 된만큼 우수한 ID를 전송하게되며, 사람들이 "보안을 모호하게하여 보안을 패닝 할 때 사용하는 것보다 더 강력합니다"라고 주장합니다. "
Marc Stober

0

여기에는 유용성과 보안의 두 가지 측면이 있습니다.

보안 측면에서 모호한 ID는 다소 의미가 없습니다. 중요한 것은 ID가 비공개 리소스에 대한 유일한 '키'가되어서는 안된다는 것입니다. 즉, 선택한 사용자에게 특정 페이지에 대한 액세스 권한을 부여하려면 URL에 페이지 ID 만 있으면 충분하지 않으므로 사용자 이름 / 암호 로그인 또는 공개 / 개인 키 인증과 같은 실제 보안 메커니즘을 구현해야합니다. 적절한 권한뿐만 아니라 시스템은 사용자 X가 자원 Y에 액세스 할 수 있는지 여부를 시스템별로 판단 할 수 있어야합니다.

유용성 측면에서 일반적인 조언은 인공 키를 숨겨두는 것입니다. 사용자에게는 아무런 의미가 없으며 명백한 방식으로 공개함으로써 외부에 살기 때문에 다루기가 어려운 추가 종속성을 소개합니다. 소프트웨어의 영역-사람들 ID, 이메일, 팩스, 인쇄, 북마크 등의 ID 적어 놓을 것이며 ,이를 변경하면 성가신 지원 티켓이 필요합니다.


웹 앱에서 사람들이 어떤 이유로 든 내부 ID를 기록하는 예제를 생각할 수 없습니다. 내가 이해할 수있는 ID가있는 URL이나 다른 것을 이메일로 보내거나 북마크하는 경우 유용성이 어디에서 나오는지 알 수 없습니다. 미드 스트림으로 변경하는 것은 제안하지 않았지만 이것이 어떻게 문제가 될지 당신의 요점을 이해합니다.
웨슬리 머치

@ Madmartigan : 맞춤형 정보 시스템에서는 그리 드물지 않습니다. 사용자는 특정 작업을 수행해야하며 때로는 응용 프로그램이 직접 지원하지 않거나 깨지거나 ID를 직접 확인하는 것이 소프트웨어 설계자가 계획 한 경로를 통과하는 것보다 쉽습니다. 사람들은 얻을 수있는 매우 이런 것들과 창조, 그리고 당신이 알기도 전에, 그 '내부'ID 년대는 자신의 삶을 선도 시작합니다.
tdammers 2016 년

0

아니요 , 당신은 절대적으로 내부 ID를 아는 것만으로 임의의 리소스에 액세스하는 것을 원하지 않습니다. 이것은 당신이 존재하는 상상 어떤 악의적 인 범죄, 또는 일반 유치 존재 인터넷이며, 실제로 존재 하고 조만간 그들은 것입니다 귀하의 사이트에 온다. 당신이 이제까지 봉사 할 수 있었다 모든 것을 모든 사람에게 완전히 공개 (당신이 경우 수 없습니다 보장도 한 고객이있는 경우), 당신은하지 않는 합니다 실제로를 보유 할 권한이있는 사람들에 대한 액세스를 제한합니다.

일반적인 해결책은 암호화 된 세션에 저장된 일종의 인증 토큰을 사용하고 실제로 전송하기 전에 인증 된 사용자가 볼 수 있는지 확인하는 것입니다. 이는 JDK와 함께 제공되는 것과 같은 실제 보안 관리자이거나 일관되게 수행하는 한 동일한 역할을 수행하는 다른 구성 요소 일 수 있습니다. (이미 인증 된 사람에게 내부 ID를 공개할지 여부는 다양한 장단점에 대한 흥미로운 질문이지만 보안에 덜 중요합니다.)

비즈니스를하는 사람이 실제로 공격을받을 때까지이를 수행하는 가치는 계산하기 어렵습니다. 그렇다면 그것은 일반적으로 사업을 중단하고 또 다른 박식 한 스크립트 아동을 으 rug하는 것의 차이점입니다.


2
나는 당신이 잘못된 생각을 얻었을지도 모른다고 생각한다. 나는 "내부 ID를 아는 것만으로 임의의 리소스에 접근하는 것을 허용하지 않는다"고 제안하지 않았다. 분명히 ID 또는 해시를 아는 것은 권한 부여로 간주되어서는 안됩니다.
웨슬리 머치

0

분명히 데이터의 민감도에 달려 있지만 중간 정도의 보안을 위해서는 ID와 체크섬 값을 포함시켜야합니다.

ID 전후에 솔트 (예 : 임의의 문자 집합 집합)를 추가하고 값에 대해 MD5를 수행하여 체크섬을 생성하십시오.

ID 값을 읽는 모든 페이지에서 체크섬 값을 생성하고 전달 된 값과 비교하여 일치하지 않으면 요청을 거부해야합니다.

잠재적 인 해커가 충분한 유효한 조합을 얻을 수있는 경우 무차별 대입으로 Salt 값을 계산할 수 있으므로 도움이 될 사용자 ID 확인과 같은 다른 보안 계층을 추가 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.