개체의 ID에 대한 API 호출을 바인딩하면이 개체에 모든 개체를 가져올 수 있습니다. MySQL에 대해 생각해 보면 증분 정수 ID를 사용하면 완전히 가능할 것입니다. 그러나 MongoDB는 어떻습니까? ID는 짐작할 만합니까? 예를 들어 하나의 ID를 알고 있다면 다른 (다음, 이전) ID를 쉽게 추측 할 수 있습니까?MongoDB id는 짐작할 만합니까?
감사합니다.
개체의 ID에 대한 API 호출을 바인딩하면이 개체에 모든 개체를 가져올 수 있습니다. MySQL에 대해 생각해 보면 증분 정수 ID를 사용하면 완전히 가능할 것입니다. 그러나 MongoDB는 어떻습니까? ID는 짐작할 만합니까? 예를 들어 하나의 ID를 알고 있다면 다른 (다음, 이전) ID를 쉽게 추측 할 수 있습니까?MongoDB id는 짐작할 만합니까?
감사합니다.
+1 세르지오의 대답에 대해 그들이 추측 할 수 있는지 없는지에 대한 해답은 해시가 아니며 예측 가능하기 때문에 충분한 시간이 주어지면 "짐승 같은 강제"가 될 수 있습니다. 가능성은 ObjectID가 생성 된 방법과 추측에 대한 이동 방법에 따라 다릅니다. 첫째, 설명하기 위해, 여기에 사양을 읽어
http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification
다음 우리를 보자 조각으로 조각을 분해 :
조금 확장에 덜 예측 근원에. 하며 Object는 생성 할 수 있습니다 :
따라서 개별적으로 추측하기 어렵도록하기 위해 할 수있는 일이 있지만 일반적인 데이터 세트의 경우 많은 고려 사항이나 보호 수단이 없으면 유효한 ObjectID의 범위는 그들은 모두 타임 스탬프가 접두사로되어 있기 때문에 운동하기가 쉽습니다 (어떤 방식 으로든 이것을 조작하지 않는다면).
몽고의 ObjectId는 무차별 공격 (또는 그 문제에 대한 공격)으로부터의 보호를 의미하지 않았습니다. 그들은 단순히 세계 유일성을 제공합니다. 이 아니어야합니다.은이 사용자가 해당 ID를 알지 못하기 때문에 사용자가 일부 개체에 액세스 할 수 없다고 가정합니다.
리소스를 실제로 보호하려면 다른 기술을 사용하십시오.
무단 액세스로부터 보호하려면 승인 로직을 앱에 배치하십시오 (합법적 인 사용자는 액세스 허용, 다른 사용자는 거부).
모든 개체를 버리는 것을 막으려면 어떤 종류의 속도 제한을 사용하십시오. 가능한 경우 승인과 결합하십시오.
옵션 독서 : Eric Lippert on GUIDs.