2012-09-11 1 views
7

일부 사람들은 내부 ID를 외부 세계에 노출 시켜서는 안된다고 말한 것으로 들었습니다 (예 : auto_increment'ng 기본 키).API 디자인 및 보안 : 내부 ID를 숨기는 이유는 무엇입니까?

일부는 조회를 위해 대신 사용하는 일종의 uuid 열을 제안합니다.

정말로 이것이 왜 제안되고 정말로 중요한지 궁금합니다.

대신 uuid를 사용하면 기본적으로 id를 난독 화합니다. 점은 무엇인가? 내가 생각할 수있는 유일한 사실은 auto_incrementing 정수가 분명히 내 db 객체의 순서를 가리킨다는 것입니다. 외부 사용자가 한 가지가 앞뒤로 생성되었음을 알고 있다면 중요합니까?

또는 id를 난처하게하는 것이 특정 객체에 대한 다른 작업에서 "추측"을 방지하는 것입니까?

외장 API를 디자인 할 때 고려해야 할 문제입니까?

답변

2

응용 프로그램 및 레이아웃에 대해 악의적 인 사용자에게 제공 한 정보는 응용 프로그램에 대해 사용될 수 있습니다. 우리가 (웹) 애플리케이션 보안에서 직면하는 문제 중 하나는 프로젝트의 초기 단계에서 취한 겉으로보기에는 무해한 설계 결정이 프로젝트가 커질 때 아킬레스 건즈가 될 수 있다는 것입니다. 개체의 순서에 대한 공격자 메이크업 통보 추측을시키는 것은 다소 관련이없는 방법으로, 다음에 당신을 잡으러 돌아올 수 있습니다

  1. 엔티티의 ID는 필연적으로 응용 프로그램의 어떤 시점에서 매개 변수로 전달됩니다 . 이로 인해 결국 해커는 일반적으로 액세스하지 않아야하는 애플리케이션 인수를 제공 할 수있게됩니다. 저는 개인적으로 비즈니스 정보가없는 주문 세부 정보 (매우 인기있는 소매 업체의 사이트에서)를 URL 인수로 볼 수있었습니다. 나는 단순히 자신의 합법적 인 주문으로부터 순차적 인 숫자의 앱을 먹였다.

  2. 기본 키 필드 값의 한계 또는 적어도 진행 상황을 아는 것은 SQL 주입 공격에 대해 매우 중요합니다. 여기서는 다루지 않습니다.

  3. 키 값은 RDBMS 시스템뿐만 아니라 다른 키 - 값 맵핑 시스템에서도 사용됩니다. JSESSION_ID 쿠키 주문을 미리 결정하거나 추측 할 수 있다고 상상해보십시오. 반대되는 엄지 손가락을 가진 사람은 모두 웹 앱에서 세션을 재생합니다.

다른 많은 사람들이 여기에 올 것이라고 확신합니다.

씰 팀 6은 반드시 씰 팀 6 명이 있다는 의미는 아닙니다. 적의 추측을 유지합니다. 그리고 잠재적 인 공격자가 추측 한 시간은 당신이 그것을 자르는 어떤 방법 으로든 당신의 주머니에 돈이 더 많이 듭니다.

2

많은 보안 관련 문제와 마찬가지로 미묘한 대답입니다. kolossus는 좋은 개요를 제공합니다.

공격자가 API를 손상시키는 방법과 보안 위반이 얼마나 발생하는지 이해하는 데 도움이됩니다.

대부분의 보안 침해는 버그 또는 감시로 인해 발생하며 공격자는 이러한 침입을 찾습니다. API를 손상시키려는 공격자는 먼저 API에 대한 정보를 수집하려고 시도합니다. 이는 API이므로 상세한 사용 설명서를 게시 한 것 같습니다.공격자는이 문서를 사용하여 사이트 충돌을 일으키고 (따라서 운이 좋으면 더 많은 정보를 노출하는) 여러 가지 방법을 시도하거나 예상하지 못한 방식으로 대응합니다.

당신은 공격자가 많은 시간을 가지고 있다고 가정해야하며 무한한 시간을 가진 도둑과 같은 모든 길을 시도하기 위해 공격을 스크립트합니다. 모든 문과 창을 시도하는 집안을 돌아 다니며 배우는 자물쇠 따기와 함께 모든 시도에서.

API가 getUserInfo(userid)과 같은 메서드를 제공하고 userID가 정수인 경우 공격자는 사용자를 몇 명 이상 가지고 있는지 알아보기 위해 스크립트를 0 이상으로 반복 작성합니다. 음수를 시도하고 max(INT) + 1을 시도합니다. 애플리케이션이 이러한 모든 경우에 정보를 유출 할 수 있으며, 개발자가 특정 오류를 처리하는 것을 잊어 버린 경우 의도 한 것보다 많은 데이터가 노출 될 수 있습니다.

API에 특정 데이터에 대한 액세스를 제한하는 논리가 포함되어있는 경우 (예 : 친구 목록에있는 사용자에 대해 getUserInfo을 실행할 수 있습니다. 공격자는 버그 또는 감독으로 인해 일부 번호로 운이 좋을 수 있으며, 그가 얻는 정보가 유효한 사용자와 관련되어 있음을 알 수 있습니다. 응용 프로그램이 설계된 방식의 모델을 구축하십시오. 그것은 당신의 모든 자물쇠가 하나의 제조업 자로부터 온다는 것을 알고있는 도둑의 등가물이기 때문에, 자물쇠 따기 만하면됩니다.

이것은 공격자에게는 별 도움이되지 않을 수 있지만 삶의 질이 향상됩니다.

UUID 또는 다른 의미없는 식별자를 사용하려는 노력을 감안할 때 공격자가 더 어렵게 만드는 것이 좋습니다. 물론 가장 중요한 고려 사항은 아닙니다. 공격자로부터 API를 보호하기 위해 수행해야하는 5 가지 작업을 수행하지는 않지만 도움이됩니다.

2

큰 답변은 내부 자동 증가 ID를 노출하고 싶지 않은 또 다른 이유를 추가 할 것입니다.
경쟁력있는 회사로서 매주/하루/시간에 얼마나 많은 신규 사용자/주문/등을 쉽게 측정 할 수 있습니다. 난 그냥 사용자 및/또는 주문을 생성하고 내가 마지막으로 얻은 것에서 새 ID를 뺄 필요가 있습니다.
보안상의 이유로 비즈니스상의 이유로도 마찬가지입니다.

관련 문제