programing

실시간 데이터베이스에 안전하지 않은 규칙이 있다는 Firebase 이메일

powerit 2023. 6. 22. 22:32
반응형

실시간 데이터베이스에 안전하지 않은 규칙이 있다는 Firebase 이메일

최근에 Firebase에서 실시간 데이터베이스에 보안 규칙이 있다는 이메일을 받았습니다.제가 설정한 규칙은 다음과 같습니다.

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
 }
}

이것은 안전한 규칙이 아닙니까?

전자 메일/암호가 유일하게 활성화된 로그인 방법입니다.

여기서 불을 뿜습니다.

이메일이 해당 규칙에 대해 안전하지 않은 부분에 대해 매우 명시적이지 않았다면 죄송합니다.사용자의 데이터를 보호하는 것은 사용 가능한 모든 앱에서 중요한 단계이므로, 어떻게 작동하는지 아래에서 조금 더 설명해 보겠습니다.

사용자가 설정한 (기본값) 규칙은 백엔드에 로그인한 모든 사용자에게 전체 데이터베이스에 대한 전체 읽기/쓰기 권한을 허용합니다.이는 매우 기본적인 보안 계층에 불과합니다.

이것은 모든 사용자에게 데이터베이스에 대한 액세스 권한을 부여하는 것보다 안전합니다. 적어도 로그인해야 합니다.

반면, Firebase 인증에서 인증 공급자를 활성화하면 앱을 사용하지 않아도 누구나 백엔드에 로그인할 수 있습니다.공급자에 따라 브라우저의 개발자 콘솔에서 약간의 JavaScript를 실행하는 것만큼 쉬울 수 있습니다.그리고 일단 로그인하면, 그들은 여러분의 데이터베이스에 있는 모든 것을 읽고 쓸 수 있습니다.즉, 다음과 같은 간단한 명령으로 모든 데이터를 삭제할 수 있습니다.firebase.database().ref().delete().

데이터 액세스를 보다 안전하게 하려면 로그인한 각 사용자가 수행할 수 있는 작업을 보다 엄격하게 제어해야 합니다.예를 들어, 아래의 각 사용자에 대한 정보가 포함된 프로필을 유지한다고 가정합니다./users모든 사용자가 이러한 프로필에 액세스할 수 있도록 허용할 수 있지만 사용자가 자신의 데이터만 수정할 수 있도록 해야 합니다.다음 규칙을 사용하여 이를 보호할 수 있습니다.

{
  "rules": {
    "users": {
      ".read": true,
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

이러한 규칙을 사용하면 모든 사용자(인증되지 않은 사용자도)가 모든 프로필을 읽을 수 있습니다.그러나 각 프로필은 해당 프로필을 가진 사용자만 수정할 수 있습니다.이에 대한 자세한 내용은 사용자 데이터 보안에 대한 Firebase 문서를 참조하십시오.

데이터에 대한 모든 액세스 권한을 보장할 뿐만 아니라 저장된 모든 데이터가 앱에 대한 모든 규칙에 유효한지 확인해야 합니다.예를 들어, 사용자의 이름과 나이라는 두 가지 속성을 저장하고 싶다고 가정해 보겠습니다(예를 들어 실제로는 생년월일을 대신 저장할 수 있습니다).이를 다음과 같은 형태로 저장할 수 있습니다.

"users": {
  "uidOfPuf": {
    "name": "Frank van Puffelen",
    "age": 48
  }
}

이 데이터만 기록할 수 있도록 다음 규칙을 사용할 수 있습니다.

{
  "rules": {
    "users": {
      ".read": true,
      "$user_id": {
        ".write": "$user_id === auth.uid",
        ".validate": "data.hasChildren(['name', 'age'])",
        "name": {
          ".validate": "data.isString()",
        },
        "age": {
          ".validate": "data.isNumber()",
        },
        "$other": {
          ".validate": false
        }
      }
    }
  }
}

이러한 규칙은 각 사용자 프로파일에 다음과 같은 정보를 제공합니다.name그리고.age각각 문자열과 숫자 값을 가진 속성.다른 사용자가 추가 속성을 작성하려고 하면 쓰기가 거부됩니다.

위는 (사용자의) 데이터를 보호하는 방법에 대한 간단한 입문서입니다.자세한 내용은 Firebase 보안 설명서(및 포함된 비디오)를 참조하는 것이 좋습니다.


업데이트: 2021년 5월부터 Firebase App Check를 사용하여 웹 사이트 또는 앱에서 걸려오는 통화에 대한 액세스를 제한할 수 있습니다.이것은 데이터베이스의 남용을 줄일 수 있는 또 다른 빠른 방법입니다.그러나 이 접근 방식은 완벽하지 않으므로 광범위한 보호를 위한 App Check와 세분화된 제어를 위한 보안 규칙을 결합하기를 원할 것입니다.

이메일 하단의 링크를 방문하여 알림을 음소거할 수도 있습니다.

https://console.firebase.google.com/subscriptions/project/ <사용자_프로젝트_이름>

enter image description here

나는 규칙을 바꿨습니다.

{
  "rules": {
    "users": {
      ".read": true,
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

하지만 그 페이지는 작동하지 않습니다.

언급URL : https://stackoverflow.com/questions/51392059/firebase-email-saying-my-realtime-database-has-insecure-rules

반응형