What should I do if a Firebase security rule letter arrives? [duplicate] - firebase

This question already has answers here:
Email: [Firebase] Client access to your Cloud Firestore database expiring in X day(s)
(6 answers)
Closed 3 years ago.
Reached mail what needs to be made?
rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// This rule allows anyone on the internet to view, edit, and delete
// all data in your Firestore database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your Firestore database will be denied.
//
// Make sure to write security rules for your app before that time, or else
// your app will lose access to your Firestore database
match /{document=**} {
allow read, write: if request.time < timestamp.date(2020, 2, 15);
}
}
}
Is it worth the worry? Will this break the application if nothing is done?

Your security rules are set to reject all access to your database on the date specified in the rules:
timestamp.date(2020, 2, 15)
Which is February 15, 2020. This will probably make your app stop working.
You can bump the date back if you want, but you should definitely implement proper rules so that your database isn't readable and writable by anyone with an internet connection.

Related

Firebase: Firestore security rule for production

Below is a sample security code I am trying to implement in production but it keeps throwing following error.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.time < timestamp.date(2022, 4, 13);
}
}
}
Error:
Missing or insufficient permissions.
I only want a "read only" database for production. What am I missing here?
allow read: if request.time < timestamp.date(2022, 4, 13);
This statement returns true only when time of current time is before 13th April 2022 that was yesterday.
match /{doc=**} {
allow read: if true;
}
You can switch to rules shown above to always allow read operations.
However, these rules allow anyone on the internet to read your database (that should be fine for this specific use case) but you should write secure rules if you also have any other use case.
Checkout more about security rules in the documentation. Also checkout Get to know Cloud Firestore | Security Rules video on Firebase's Youtube channel.
if you want a read-only database then you're probably looking for the ruleset something like this:
allow read;
allow write: if false;
And, just an extra tip, give your users the most minimal permissions. That means, in this case, itself, you probably don't want to give your users read permission to the entire database.
So, it's always a better choice to allow reading or writing only to the specific collections or documents.

Firebase Firestore security rules seem not applied at all

I'm quite new to Firebase, but either I misunderstand something completely or there's something wrong with my Firebase account.
I added a Firestore Database to my Firebase app, and initially I chose it to be created in test mode. As far as I've read in the docs, test mode differs from production mode only by the default security rules.
I wanted to configure my rules properly, so the users can only access their own data.
However, I couldn't make it work, so I tried to configure my Firestore security rules to not allow any read or write operations to anyone. This is what I have currently set in Firestore Database -> Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
As I understand, these rules should not allow any read or writes in any collection in my database.
The rules playground tells me exactly that when I try to run any request:
However, from my NextJS app I'm still able to get the data as follows:
import {
getFirebaseAdmin
} from 'next-firebase-auth';
// ...
const categoriesDocument = await getFirebaseAdmin()
.firestore()
.collection('categories')
.doc('D47pV7TxNpDNYNkHgfU0')
.get();
and it all works just fine. I'm also sure the data is fetched from exactly this Firestore db, because when I alter some documents it's reflected in the data fetched.
I also noticed that in Firebase in Firestore Database -> Rules -> Monitor rules I see no results at all (total allows: 0, total denies: 0, total errors: 0).
Any idea what could be wrong here? What am I missing?
On the server, you're using firestore as admin. Rules don't apply there.

firebase database not returning or displaying newly created collections

Hi i have been trying to follow the tutorial in creating an app using firebase. However, i am unable to view the collection once i have entered the various field.
The save button is disabled even when i have multiple fields filled out and document id is blank... I have to click autoId and then it becomes enable.
Even if i click save, i am unable to view the collection.....anyone know what permission i need to set?
Here is my current rule
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// This rule allows anyone with your database reference to view, edit,
// and delete all data in your Firestore database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your Firestore database will be denied.
//
// Make sure to write security rules for your app before that time, or else
// all client requests to your Firestore database will be denied until you Update
// your rules
match /{document=**} {
allow read, write: if request.time < timestamp.date(2020, 8, 29);
}
}
}
here when i entered some fields without hitting auto-generate id, it will remain disabled....
They recently changed this, I think - you now have to hit "Auto-ID" to generate the ID before saving. Previously it had automatically done it when you hit Save. I don't think the tutorial has been updated to reflect this. This should create the collection and the first document. There is no "table" - this is NoSQL -there is a collection with a document in it

Firebase Realtime Database Permissions Denied [duplicate]

This question already has answers here:
Firebase chat app setValue failed error with a public database?
(2 answers)
Closed 3 years ago.
Basically, i am trying to read data from a firebase real time database. I receive permissions denied.
Firebase Console -> database -> Rules :
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
My application code:
const db = firebase.database(firebase.initializeApp(
{databaseURL: “myApp.firebaseio.com"}
))
db.ref("/budgets/currentBudget")
.once("value")
.then((snapshot)=>console.log(snapshot))
I would expect to connect to the database and be able to read the data because of the rules i have set. I receive this error:
Error:
index.cjs.js:738 Uncaught (in promise) Error: permission_denied at /budgets/currentBudget: Client doesn't have permission to access the desired data.
at errorForServerCode (index.cjs.js:738)
at onComplete (index.cjs.js:10124)
at Object.onComplete (index.cjs.js:14314)
at index.cjs.js:13289
at PersistentConnection.onDataMessage_ (index.cjs.js:13594)
at Connection.onDataMessage_ (index.cjs.js:12735)
at Connection.onPrimaryMessageReceived_ (index.cjs.js:12728)
at WebSocketConnection.onMessage (index.cjs.js:12607)
at WebSocketConnection.appendFrame_ (index.cjs.js:12144)
at WebSocketConnection.handleIncomingFrame (index.cjs.js:12203)
at WebSocket.mySock.onmessage (index.cjs.js:12078)
There are a few questions asking about this but most of them are solved when the rules are simply changed to true on both read and write. Any ideas how to get this working?
The rules you're showing are not for Firebase Realtime Database. Those are for Cloud Firestore, which is a completely different database. Realtime Database has a different rules language, which are entered into a different part of the Firebase console. Start learning about Realime Database rules here.

How to use Firestore Security Rules perfectly

I read the documentation and watched the video about this
but still not understanding perfectly
I mean I know how to write those security rules
but when should I use this?
do I have to write out all Security Rules for all the collections and documents? (if do so, it`s gonna be huge)
for instance, I`m making random dating app right now.
in my situation, I think I would not be so concerned about security unless I'm concerned with the payment system.
If I do not set up security rules for all documents, are all those documents in danger? (unsecured ones)
Unless you want anyone on the internet to be able to read and write any document in your database, you will need to use security rules to protect them. Whether or not this is going to be a problem for you, it's impossible to tell. But the possibility exists.
Go through this step by step then you will know how to use rules this
Basic Rules
Our Firestore security rules for Fogo, our image-sharing app, are as follows:
service cloud.firestore {
match /databases/{database}/documents {
match /uploads/{document=**} {
allow write: if request.auth.token.admin == true ;
allow read;
}
​
match /users/{document=**} {
allow read, write: if request.auth.token.admin == true ;
}
}
}
Let's break these rules down line-by-line.
service cloud.firestore — defines the service, in this case it's cloud.firestore
match /databases/{database}/documents — defines the database; the {database} clause indicates that these rules apply to all Firestore databases on the project
match /uploads/{document=**} — creates a new rules block to apply to the uploads collection and all documents contained therein
allow write: if requests.auth.token.admin == true ; — allows write access for authenticated sessions with an admin attribute equal to true on the auth token, which is also known as the user's JWT
allow read; — allows public read access
match /users/{document=**} - creates a new rules block for the users collection and all documents contained therein
allow read, write: if request.auth.token.admin == true ; - allows both read and write access for authenticated sessions with an admin attribute equal to true on the auth token, which is also known as the user's JWT

Resources