UID хэш-безопасности Firebase не соответствует вычисленному клиенту - PullRequest
0 голосов
/ 02 мая 2020

Следуя документации Firebase здесь , я внедрил следующее правило безопасности:

match /docs/{hashID} {
  allow read, write: if hashing.md5(request.auth.uid.toUtf8()).toBase64() == hashID;
}

На стороне клиента я использую node-md5 для вычисления хэш-идентификатор пользователя и запись в документ

firebase.firestore().collection("docs").doc(md5(user.uid)).writeSomething()

Правило безопасности не выполняется, поскольку хэши не совпадают.

Для uid «crz6KyreRCM4A0Qvk9EfeXHBLF43» мой клиент md5 выдает мне «eee1f958a8c0a27ef6886736768683b686 , в то время как Firebase Rules Playground выдает мне "fbOLeadWz7YxnsGgfESBNg ==". Я проверил правильность значения md5 клиента, используя https://www.md5hashgenerator.com/. Что я делаю не так в правиле безопасности?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Решено! Вывод node-md5 был шестнадцатеричной строкой, поэтому подходит следующее правило:

match /docs/{hashID} {
  allow read, write: if hashing.md5(request.auth.uid.toUtf8()).toHexString() == hashID;
}

Более того, toHexString() Firebase возвращает результат во всех заглавных буквах, поэтому мне нужно сделать это на стороне клиента

firebase.firestore().collection("docs").doc(md5(user.uid).toUpperCase()).writeSomething()
0 голосов
/ 02 мая 2020

Вы звоните toBase64() без необходимости. Это для преобразования байтовых массивов в строки, которые затем можно хэшировать. Поскольку здесь вы имеете дело исключительно со строками, вам не нужно ничего кодировать в base64.

...