2014-01-07 2 views
0

Firebase를 사용하여 추측하기 어려운 공개적으로 읽을 수있는 데이터를 만들고 싶습니다. 따라서 "element [element ID = X]"에 저장된 데이터에 대한 액세스 권한을 부여하려면 액세스 권한을 부여하기 위해 만들어진 보안 토큰과 함께 "X"를 보내는 대신 "X"로 보내고 싶습니다. 요소에. Firebase의 push()childByAutoID은 자연스럽게 적합합니다. 나는 모든 개별 요소에 공개 읽기 권한을 부여 할 수 있지만 공개 목록을 거부 할 수 있습니다. 내 코드는 매끄럽게 토큰 및 난수 생성이 없습니다. 자동 생성 된 ID는 고유해야하기 때문에 추측하기 어려워 야합니다.Firebase의 push()/childByAutoID를 사용하여 생성 된 이름의 고유성 보장은 무엇입니까?

Firebase.js에서 볼 때 자동 생성 된 ID의 처음 8 자는 현재 시간 소인을 기반으로하며 다음 12 자는 Math.random()을 사용하여 임의로 생성됩니다. 나는 iOS 프레임 워크가 똑같은 일을한다고 가정하고, 비록 코드를 볼 수는 없지만 라이브러리는 SecRandomCopyBytesarc4random에 링크되어있다.

필자의 의도로 보아도 충분하지만,이 동작에 의존 할 수 있는지 여부는 Firebase의 지침을 본 사람이 있습니까? 나는이 이름들이 상대적으로 강한 임의의 문자열이라고 가정하는 코드를 작성하는 것을 싫어하고 새로운 버전의 Firebase로 업그레이드 할 때 위 가정을 위반하게됩니다.

답변

4

Firebase에서 제공하는 자동 생성 ID의 목적은 개발자가 분산 방식으로 시간순으로 정렬 된 목록을 만들 수있게하는 것입니다. Math.random과 타임 스탬프를 사용하여 해당 클라이언트에 고유 한 ID를 생성합니다.

그러나 자동 ID를 보안 키로 사용하려는 경우 시스템의 보안 수준에 따라 최적의 아이디어가 아닐 수 있습니다. Math.random은 not a cryptographically secure random number generator이고 push()가 이에 의존하므로 생성 된 ID도 마찬가지입니다.

키를 알고 있다면 Firebase의 일부 데이터에 대한 사용자 액세스 권한을 부여하는 일반적인 개념은 있지만 좋은 개념입니다. 이 유형의 보안 규칙을 사용하는 example이 있지만 밀어 넣기 ID를 사용하는 대신 콘텐츠 자체의 SHA-256 해시를 사용합니다 (이 경우에는 이미지 임). 키를 생성하기 위해 내용을 해싱하는 것은 push() ID에 의존하는 것보다 더 안전합니다.

+1

어디에서나 push() ID의 스펙이 쓰여 있습니까? 몇 가지를 살펴보면 길이는 항상 20 자이고 "-"로 시작하고 나머지 19 자는 [A-Z] [a-z] [0-9] 및 "-"일 수 있습니다. 다른 건 없니? – neverfox

+0

대단한 질문입니다. 나는 그 대답을 알고 싶다. 예 : 항상 대시 접두어를 사용할 수 있습니까? – chris

+0

유효한 Firebase 키가 아닌 푸시 ID 형식과 푸시()에 대한 후속 호출이 시간별로 ID를 정렬한다는 사실에 대한 보장은 없습니다. 이상적으로 앱은 푸시 ID가 사용 된 경로를 이미 알고있을 것이므로 푸시 ID를 동일한 경로에서 맞춤 키 이름과 함께 사용하는 것은 좋지 않습니다. – Anant

관련 문제