2011-08-16 34 views
8

Tôi đang cố gắng tạo một bảng với mongoDB.Sử dụng ID đích Mongodb làm ID tài liệu?

Tôi muốn chỉ định ID tài liệu với ObjectID.

Nếu người dùng có thể truy cập vào trang tài liệu theo http://www.example.com/4easdf123123 trong đó "4easdf123123" là đối tượng mongoDB.

Có bất kỳ mối đe dọa bảo mật nào có thể không, Nếu tôi sử dụng và hiển thị Objecto mongo trong URL và sử dụng nó làm id tài liệu?

Và mọi đề xuất có gán ID tài liệu với mongoDB?

+4

Không thể thấy bất kỳ vấn đề nào với điều đó. Nó giống như việc sử dụng một ID RDBMS được tạo trong một URL – Phil

+0

Bạn có thể sử dụng: https://github.com/treygriffith/short-mongo-id – user956584

Trả lời

8

Điều đó không giống như ObjectID MongoDB - một ObjectID là 12 byte dữ liệu nhị phân và khi được hiển thị dưới dạng chuỗi thập lục phân (cách thông thường để sử dụng trong URL), dài 24 ký tự. Tôi giả sử bạn đang sử dụng official PHP Mongo Driver, trong trường hợp đó hàm tạo của lớp MongoId sẽ bỏ qua các giá trị không hợp lệ và tạo một giá trị mới cho bạn. Trong mọi trường hợp, tốt nhất là để cho trình điều khiển tạo ra một ObjectID/MongoId cho bạn, vì nó sẽ làm như vậy theo cách tránh được va chạm.

Vì sự an toàn của việc sử dụng nó trong URL của bạn, bạn nên ổn. Tất nhiên, bạn nên sử dụng các biện pháp phòng ngừa thông thường để thực thi mã để đảm bảo rằng người dùng hiện tại có quyền truy cập để xem đối tượng đang được hiển thị, v.v. , số nguyên, vv) và thường có ít hơn, vì ObjectID không có giá trị ngữ nghĩa (trong khi một chuỗi như "adminuser" trong URL có thể truyền đạt rằng URL liên quan đến người dùng có đặc quyền nâng cao).

+0

okay Tôi sẽ sử dụng nó :) – InspiredJW

+0

Có thể tạo bao nhiêu ObjectID MongoDB duy nhất ? Có khả năng xung đột trong dữ liệu khổng lồ không? – InspiredJW

+0

'ObjectId's được thiết kế độc đáo ngay cả khi được tạo mà không có sự phối hợp trên ứng dụng của bạn. Chúng bao gồm dấu thời gian, mã băm của ID máy, quá trình hoặc ID luồng và bộ đếm gia tăng 3 byte. Bạn cần tạo 2^24 hoặc khoảng 16 triệu 'ObjectId' từ cùng một tiến trình/luồng để có xung đột (hoặc chạy vào một xung đột băm trên ID máy). Ngay cả khi điều này xảy ra, nó sẽ chỉ là một vấn đề nếu 'ObjectId' s trong câu hỏi đã được sử dụng trong cùng một bộ sưu tập như '_id' (hoặc trong một lĩnh vực duy nhất). – dcrosta

Các vấn đề liên quan