2012-07-20 6 views
16

개체의 ID에 대한 API 호출을 바인딩하면이 개체에 모든 개체를 가져올 수 있습니다. MySQL에 대해 생각해 보면 증분 정수 ID를 사용하면 완전히 가능할 것입니다. 그러나 MongoDB는 어떻습니까? ID는 짐작할 만합니까? 예를 들어 하나의 ID를 알고 있다면 다른 (다음, 이전) ID를 쉽게 추측 할 수 있습니까?MongoDB id는 짐작할 만합니까?

감사합니다.

답변

12

+1 세르지오의 대답에 대해 그들이 추측 할 수 있는지 없는지에 대한 해답은 해시가 아니며 예측 가능하기 때문에 충분한 시간이 주어지면 "짐승 같은 강제"가 될 수 있습니다. 가능성은 ObjectID가 생성 된 방법과 추측에 대한 이동 방법에 따라 다릅니다. 첫째, 설명하기 위해, 여기에 사양을 읽어

http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

다음 우리를 보자 조각으로 조각을 분해 :

  • 타임 스탬프 - 당신이 할 때의 일반적인 생각을 가지고있는만큼 완전히 예측 데이터가 생성되었습니다
  • 기계 - 이것은 여러 옵션 중 하나의 MD5 해시입니다. 일부는 다른 옵션보다 쉽게 ​​결정되지만 환경에 크게 좌우됩니다.
  • PID - 다시 말해서 엄청난 양의 VA 여기에 역병 및 알려진 소스에서 생성 된 데이터를 보았지만 할 수
  • 증가 -이 임의의 숫자보다는 증가가 (모두 허용) 인 경우,

조금 확장에 덜 예측 근원에. 하며 Object는 생성 할 수 있습니다 :

  • 귀하의 응용 프로그램 (수동으로 삽입 할 수 있습니다 (삽입 또는 업데이트 데이터를 모든 컴퓨터에)
  • 드라이버를

    • MongoDB를 자체 (하지만 마이그레이션 할 수 있습니다, 이동, 갱신)하여 자신이 원하는 경우 ObjectID)

    따라서 개별적으로 추측하기 어렵도록하기 위해 할 수있는 일이 있지만 일반적인 데이터 세트의 경우 많은 고려 사항이나 보호 수단이 없으면 유효한 ObjectID의 범위는 그들은 모두 타임 스탬프가 접두사로되어 있기 때문에 운동하기가 쉽습니다 (어떤 방식 으로든 이것을 조작하지 않는다면).

  • 11

    몽고의 ObjectId는 무차별 공격 (또는 그 문제에 대한 공격)으로부터의 보호를 의미하지 않았습니다. 그들은 단순히 세계 유일성을 제공합니다. 이 아니어야합니다.은이 사용자가 해당 ID를 알지 못하기 때문에 사용자가 일부 개체에 액세스 할 수 없다고 가정합니다.

    리소스를 실제로 보호하려면 다른 기술을 사용하십시오.

    무단 액세스로부터 보호하려면 승인 로직을 앱에 배치하십시오 (합법적 인 사용자는 액세스 허용, 다른 사용자는 거부).

    모든 개체를 버리는 것을 막으려면 어떤 종류의 속도 제한을 사용하십시오. 가능한 경우 승인과 결합하십시오.

    옵션 독서 : Eric Lippert on GUIDs.