没有Firestore安全规则的python appengine应用是否不安全?

时间:2020-05-29 12:19:25

标签: python google-app-engine flask google-cloud-firestore firebase-security

我有一个使用Python 3编写的Google App Engine标准环境应用程序,使用Flask作为框架,并以纯模式存储了Firestore作为数据库。所有的数据库调用都在App Engine代码中完成,并隐藏在Flask端点/视图/处理程序的后面。。客户端浏览器不会执行任何直接调用Firestore数据库的JavaScript。客户端javascript基本上是用于化妆品的“哑”代码。客户端javascript唯一执行“任何操作”的时间是在用户创建新帐户或使用firebase auth ui登录时。

话虽如此,我注意到一些在线资源提到绝对有必要保护Firestore数据库,因为基本上允许安全规则不允许的任何事情(即,默认情况下Firestore数据库是不安全的),但是,我怀疑这仅适用于具有胖客户端的应用程序(即,客户端代码或javascript负责繁重的查询和写入firestore)。

所以我的问题是,是否只为移动/ Web客户端而不是仅通过服务器端代码访问的Firestore数据库编写这些安全规则?还是所有Firestore项目都必须定义这些安全规则?安全规则?如果是这样,那么我将不胜感激任何关于在哪里找到合理的默认安全规则以开始保护我的Firestore数据库的指针。

我附上了烧瓶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)

1 个答案:

答案 0 :(得分:2)

仅需要安全规则来控制来自Web和移动客户端的访问。访问Firestore的后端SDK实际上完全绕开了安全规则,因此完全编写任何规则都不会改变后端代码的行为。

如果您只是不直接从Web或移动设备直接访问数据库,则可以将安全规则设置为拒绝所有访问,这很好。

match /{document=**} {
  allow read, write: if false;
}