2016-02-29 2 views
0

Использование транзакций в Firebase - отличный способ для атомарного изменения данных, но как узнать, что пользователь действительно использует мой код для вставки данных?Безопасность Firebase - Сделки

Например, что делать, если пользователь получает ссылку на местоположение данных (используя консоль браузера) и перезаписывает предыдущие данные с использованием set вместо того, чтобы нажимать на мою предварительно запрограммированную кнопку, которая использует в фоновом режиме transaction?

Update (пример):

var wilmaRef = new Firebase('https://docs-examples.firebaseio.com/samplechat/users/wilma'); 
wilmaRef.transaction(function(currentData) { 
    if (currentData === null) { 
    return { name: { first: 'Wilma', last: 'Flintstone' } }; 
    } else { 
    console.log('User wilma already exists.'); 
    return; // Abort the transaction. 
    } 
}); 

Теперь, если пользователь использует:

wilmaRef.set({name: { first: 'Wilma', last: 'Flintstone' }}); 
+0

Ответ высокого уровня ниже. Но, как и предыдущий, этот вопрос не очень хорошо вписывается в формат переполнения стека. Добавьте конкретные структуры данных и пример кода, чтобы они соответствовали друг другу. –

+0

@FrankvanPuffelen Обновлен вопрос на примере –

+0

Это еще проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Обе операции имеют одинаковый результат. Какое злоупотребление вы пытаетесь предотвратить? Например: «Я хочу разрешить пользователю указывать только одно имя, после чего они не могут изменить его». Если вы потратите некоторое время на [Руководство по безопасности и правилам Firebase] (https://www.firebase.com/docs/security/guide/index.html), вы найдете примеры, которые реализуют это. –

ответ

1

База данных Firebase не имеет возможности гарантировать, что это определенный кусок кода, который делает модификация. См. Мой ответ на этот вопрос, чтобы узнать больше о том, почему знание URL-адреса ресурса не является угрозой безопасности. How to restrict Firebase data modification?

Работы по защите Firebase основаны на знании того, кто является пользователем, и позволяют им выполнять конкретные операции чтения/записи на основе этих знаний. Как только вы примете это мышление, не имеет значения, использует ли кто-нибудь консоль JavaScript для внесения изменений в базу данных, расположенную за вашим Android-приложением. Пока JavaScript следует правилам, которые вы установили для пользователя, который его запускает, изменения в базе данных разрешены.

+0

Спасибо за ваш ответ, но если вы дадите разрешение на запись для определенного URL-адреса, то как вы можете гарантировать, что запись выполняется через транзакции, а не 'set' –

+1

Как и нет,« как я могу обеспечить только мои приложение может писать? », также нет« как я могу гарантировать, что можно использовать только транзакцию? ». Сделка позволяет использовать текущее значение для определения нового значения. В ваших правилах безопасности вы также должны подтвердить такой переход. –

Смежные вопросы