MongoDB: 문서의 ID를 "공개"로 사용해도 안전한가?
MongoDB의 자동 생성 ID가 너무 좋아요.그것들은 정말 유용하다.
하지만, 그것들을 공개적으로 사용하는 것이 절약되는가?
투고 컬렉션이 있고 ID 파라미터(/posts/4d901acd8df94c1fe600009b 등)를 취득하여 그 정보를 표시하는 /posts 페이지가 있다고 합니다.
이렇게 하면 사용자/해커가 문서의 실제 객체 ID를 알 수 있습니다.안전한가요 아니면 안전하지 않은가요?
감사해요.
오브젝트ID 문서에는 자동으로 생성된 ID에 3바이트의 머신 ID(아마도 MAC 주소의 해시)가 포함되어 있다고 기재되어 있습니다.이러한 3바이트를 다양한 ID로 비교함으로써 내부 네트워크에 대한 정보를 얻을 수 있다는 것은 상상할 수 없는 일이지만, 펜타곤에서 일하지 않는 한(잘못 구성된 Apache와 같은 지루한 것에 훨씬 더 취약할 수 있습니다).
그 외에는 Epcylon의 말이 맞습니다.URL을 통해 ID를 공개하는 것은 본질적으로 안전하지 않습니다.물론 못생겼는지 아닌지는 또 다른 문제이다.64개의 베이스를 사용하여 길이를 줄일 수 있습니다(나 스스로 생각해도 마찬가지). 하지만 이상한 사실이 있습니다.
MongoDB 3.4 버전부터는 MongoDB에는 표시된 답변과 같은 기계 식별자가 없습니다.하지만 아이디에는 아직timestamp
데이터를 언제 생성했는지 알아내는 데 사용할 수 있습니다.ID에 사람들이 지도 데이터에 사용할 수 있는 데이터와 관련된 정보가 저장되지 않도록 하려면, 내가 하는 작업을 따라 할 수 있습니다.
생산 단계에서 MongoDB를 사용한 적이 있습니다.제 시스템에서는 일반적으로 모든 MongoDB 문서에는 2개의 고유 ID가 있습니다.
첫 번째: 기본 MongoDB_id
(MongoDB에 의해 자동으로 생성됨)
- ★★★★★★
_id
(디폴트) - 유형: 오브젝트 아이디
아이디예를 들어, 다음 두 가지 사이의 관계에 사용되는 예collection
, 캐싱 등문의처ObjectId
다음과 같은 다른 데이터 타입에 대한 쿼리보다 훨씬 빠릅니다.string
.
https://stackoverflow.com/a/27897720/10861398 를 참조해 주세요.
두 번째: 공용 ID(어플리케이션에 의해 생성됨)
- ★★★★★★
pubId
·어떤 것으로도 교환할 수 있습니다.(관련되고 간결한 이름을 사용하세요) - 유형: 나노이드
- 작은.
- 고속(보다 40% 고속)
- 안전(클러스터에서 사용 가능)
A-Za-z0-9_-
)- 포터블(Nano ID는 14개 프로그래밍 언어로 이식)
클라이언트 어플리케이션에서 데이터를 내보내고 소비할 때 메인 아이디로 사용합니다.간의 데이터 입력 및 종료, 서드파티 애플리케이션과의 통합, 클라이언트응용 프로그램의 테이블 내 행 ID 요소로서의 예 등이 있습니다.
저는 MongoDB를 실제 가동 환경에서 사용해 본 경험이 없기 때문에 제 답변을 사실로 받아들이지는 마십시오만, 왜 안전하지 않은지 이해할 수 없습니다.
RDBMS의 Auto-ID 타입 컬럼과 비교하면 항상 외부에 노출되므로 MongoDB ID에 대해 동일한 작업을 수행하지 않는 이유를 알 수 없습니다.
항상 그렇듯이 보안은 입력을 검증하고 적절한 보호 없이 데이터베이스 근처에 아무도 접근하지 못하도록 해야 합니다.올바르게 실행하세요.데이터베이스에서 특정 오브젝트를 선택하는 방법을 알고 있어도 상관없습니다.이러한 오브젝트로는 아무것도 할 수 없기 때문입니다.
mongodb _id는 데이터 스탬프, 서버 주소 및 기타 개인 정보를 기반으로 한다고 생각했습니다.
mongoid를 암호화하고 결과를 클라이언트 측 식별자로 사용할 가치가 있다고 생각되는 경우(그리고 요청이 다시 들어오면 암호화되지 않음)
암호화 키가 해당 사용자 또는 세션의 고유한 속성에 부분적으로 기반하는 경우, 사용자가 액세스해서는 안 될 컨텐츠에 액세스하기가 어렵습니다.
다른 방법으로 사용자를 검증하는 것은 여전히 중요합니다!
보안 문제라기보다는 프라이버시 문제로 생각하시면 됩니다.
나도 똑같은 문제에 직면해 있다.사용자가 작성한 콘텐츠를 Mongo 생성 ID에 기반하여 웹 액세스 가능한 디렉토리에 저장하는 경우, 한 사용자가 다른 사용자의 콘텐츠에 액세스할 수 있는 ID를 예측할 수 있다면 위험이 있습니다.
다른 사람의 조언이 올바른 방법이라고 생각합니다. 사용자 고유의 개인 콘텐츠의 URL을 아는 것만으로는 액세스 할 수 없습니다.접속을 시도하면 일치하는 사용자가 요구를 하고 있는지 확인해야 합니다.
Web 루트 외부에 유저 컨텐츠를 보존해, 새로운 루트/컨트롤러를 개입시켜 액세스를 허가하는 것으로써, Symfony2 에서는 유저에 관한 식별 정보가 확인됩니다.
ID가 링크만 필요한 "목록되지 않은" 컨텐츠에 대한 링크를 제공하는 경우, 개인 정보 보호 문제입니다.
id가 사용자 로그인 하에 있는 콘텐츠에 대한 링크를 제공하는 경우 문제 없습니다.
MongoDb든 SQL이든 다른 ID든 상관없습니다.Id는 데이터의 키입니다.이 키가 표시해서는 안 되는 콘텐츠만 표시하면 되는 경우 문제가 됩니다.이러한 경우 - 추측할 수 없는 ID를 생성합니다.
MySql의 auto increment id 값을 사용하는 것은 안전하지 않습니다.어떤 식으로든 보안침해는 아닙니다.
사용자별 주문 1과 사용자 b별 주문 2가 있다고 가정합니다.
두 사용자의 주문 1 또는 2에 대한 docid를 노출하는 것이 안전합니다(단, 코드는 a의 경우 1을 노출하고 b의 경우 2를 노출합니다).
하지만 가장 중요한 것은,
사용자가 읽기만 허용되고 /api/syslogorder/:docid와 같은 사용자가 관리자인지 확인해야 합니다.
사용자 B가 주문 1(사용자 A) 문서를 가지고 있는 경우 응답을 제공하기 전에 주문 사용자 ID를 확인해야 합니다(또한 사용자가 주문을 수행하려고 할 경우 보안 로그를 기록합니다).
언급URL : https://stackoverflow.com/questions/4587523/mongodb-is-it-safe-to-use-documents-id-in-public
'programing' 카테고리의 다른 글
Ajax를 통해 제출할 때 양식 태그를 사용하는 이유는 무엇입니까? (0) | 2023.02.23 |
---|---|
WordPress, jQuery UI CSS 파일? (0) | 2023.02.23 |
html 이메일에 이미지 포함 (0) | 2023.02.23 |
JSON.stringify 반환 [] (0) | 2023.02.23 |
커스텀 포스트 타입의 「전면」슬래그와 같은 타이틀의 WordPress 페이지가 있다. (0) | 2023.02.23 |