블로그에 대한 Firebase 실시간 데이터베이스 규칙을 안전하게 만드는 방법

블로그에 대한 Firebase 실시간 데이터베이스 규칙을 안전하게 만드는 방법

2022-10-04 last update

6 minutes reading firebase security database react
작년에 저는 새로운 디자인과 Firebase 실시간 데이터베이스로 개선했습니다my blog. 길을 따라 약간의 합병증이 있는 상당히 부드러운 주행이었습니다. 데이터베이스를 설정하는 것과 관련하여 결국 .

블로그는 계획대로 운영되고 있었는데 어느 날 Firebase 팀에서 내 데이터베이스에 대해 설정한 규칙이 안전하지 않다는 이메일을 받았습니다.

나는 혼란스러웠고, 그래서 나는 사물의 바닥에 도달하려고 할 때 평소에 하던 대로 했다.
  • 많은 기사를 읽었습니다.
  • 다양한 규칙으로 시행착오를 겪었습니다.
  • Firebase 커뮤니티 채팅에 게시되었습니다.
  • 멋진 Firebase 지원 팀과 왔다갔다 했습니다.

  • 마침내 몇 주 동안 매일 이메일을 보낸 후 중단되었습니다. 어떤 데이터베이스 설정과 규칙이 이들을 보호했는지 살펴보겠습니다.

    내 데이터베이스가 저장하는 유일한 정보는 게시물에 관한 것입니다. 다음과 같습니다.



    Firebase's security rules 에 대한 문서를 살펴봤다면 읽기/쓰기 설정에 익숙할 것입니다. 내 웹사이트는 어떤 종류의 사용자로부터 인증이나 데이터 수집이 없는 공개 블로그입니다. 따라서 읽기 요청만 허용하면 되지만 콘솔에서 새 json 파일을 업로드하여 새 블로그 게시물 추가를 유지 관리하기 때문에 쓰기 요청은 거부됩니다.

    따라서 내 규칙은 다음과 같습니다.



    분명히 내auth.uid는 회색으로 표시됩니다. 내가 그 아이디를 어디서 얻었는지 궁금해 할 것입니다. Firebase 콘솔에서 프로젝트를 열고 왼쪽 메뉴에서 '인증'을 클릭하고 한 명의 사용자를 설정했습니다. '사용자 UID' 열 아래에 auth.uid 가 있습니다. 그러나 언급했듯이 내 웹 사이트에 대한 인증이 설정되어 있지 않으므로 이 단계를 수행하지 않고도 사용할 수 있습니다. 계속 읽어보면 가장 큰 보안 단계는 thisauth.uid가 아니라 내 규칙에 posts를 추가한 것임을 알 수 있습니다. 둘 다 시도해보고 어떤 일이 일어나는지 보십시오.

    그런 다음 내 useEffect() 후크의 데이터베이스에서 데이터를 요청하는 방식도 변경해야 했습니다. 슬러그를 요청할 때 / 뒤에 'posts'라는 단어를 추가하기만 하면 됩니다.

    useEffect(() => {
      db.ref()
        .child(`/posts/${slug}`)
        // ...rest of code
    }, []);
    


    내 useEffect() 후크의 나머지 부분과 데이터를 검색하고 배치하기 위해 함께 작동하는 방식을 보려면 에 대한 내 게시물을 확인하십시오.

    이전에는 .child('/${slug}') 하고 있었습니다. Firebase 지원 팀과 이야기할 때 내 데이터베이스의 루트 노드에서 요청하는 것이 보안 취약점의 원인이라는 정보를 받았습니다. 따라서 루트 수준과 게시물 사이에 'posts'라는 또 다른 노드를 추가하여 보안을 유지했습니다. 이전에는 규칙이나 데이터베이스에 posts 노드가 없었고 모든 게시물 개체로 바로 이동했습니다.

    그리고 그게 다야! 이제 내 규칙은 안전합니다. 🎉 보안 유출에 기여하지 않는 것이 더 좋지만 더 이상 걱정스러운 이메일을 받지 않습니다.


    참고: 인증이 설정되어 있거나 광범위한 데이터베이스 계층화 및 보안 규칙이 필요한 경우this is a good blog post를 참조하십시오.