У меня есть приложение стандартной среды Google App Engine, написанное на Python 3, использующее Flask в качестве фреймворка и firestore в собственном режиме в качестве базы данных. Все вызовы базы данных выполняются в коде App Engine, скрытом за Flask конечными точками / представлениями / обработчиками. Клиентские браузеры не выполняют никаких javascript, которые напрямую вызывают базу данных firestore. Клиентская сторона javascript - это в основном «тупой» код, используемый для косметики. Клиентская сторона javascript делает «что-нибудь» только тогда, когда пользователь создает новую учетную запись или входит в систему, используя firebase auth ui .
Сказав это, я заметил, что некоторые онлайн ресурсы упоминают, что абсолютно необходимо защитить базу данных firestore, поскольку все, что не запрещено правилами безопасности, в основном разрешено (т.е. база данных firestore небезопасна по умолчанию), однако я подозреваю, что это справедливо только для приложений с толстым клиентов (т.е. код на стороне клиента или javascript отвечает за выполнение тяжелой работы по запросам и записи в firestore).
Итак, мой вопрос: пишет эти правила безопасности, необходимые только для мобильных / веб-клиентов, а не для баз данных firestore, доступ к которым осуществляется только кодом на стороне сервера? Или необходимо для всех проектов firestore определять эти правила безопасности? Если так, то я был бы признателен за любые указатели относительно того, где найти разумные правила безопасности по умолчанию, чтобы начать защиту моей базы данных firestore.
Я включаю карикатуру на свой flask main.py
файл для справки.
# main.py
from google.cloud import firestore
from mylibrary import function_that_fetches_user_data
from mylibrary2 import function_that_writes_user_content
def validate_cookie(protected_function):
def wrapper(*args, **kwargs):
# handle cookie validation
# run protected function
return wrapper
# The dashboard is meant to display user data and user content to the user.
# It is not meant to be seen by other users.
@app.route("/user_dashboard")
@validate_cookie
def dashboard():
user_id = get_uid_from_cookie
firestore_client = firestore.Client()
user_data = function_that_fetches_user_data(user_id, firestore_client)
return render_template('dashboard.html', user_data)
# The write function creates user content that should only be accessible to the author
# and the system/app.
@app.route("/write_user_content")
@validate_cookie
def write_user_content():
user_id = get_uid_from_cookie
firestore_client = firestore.Client()
result = function_that_writes_user_content(user_id, firestore_client)
return render_template('success.html', result)