
블로그에 대한 Firebase 실시간 데이터베이스 규칙을 안전하게 만드는 방법
작년에 저는 새로운 디자인과 Firebase 실시간 데이터베이스로 개선했습니다my blog. 길을 따라 약간의 합병증이 있는 상당히 부드러운 주행이었습니다. 데이터베이스를 설정하는 것과 관련하여 결국 .
블로그는 계획대로 운영되고 있었는데 어느 날 Firebase 팀에서 내 데이터베이스에 대해 설정한 규칙이 안전하지 않다는 이메일을 받았습니다.
나는 혼란스러웠고, 그래서 나는 사물의 바닥에 도달하려고 할 때 평소에 하던 대로 했다.
많은 기사를 읽었습니다. 다양한 규칙으로 시행착오를 겪었습니다. Firebase 커뮤니티 채팅에 게시되었습니다. 멋진 Firebase 지원 팀과 왔다갔다 했습니다.
마침내 몇 주 동안 매일 이메일을 보낸 후 중단되었습니다. 어떤 데이터베이스 설정과 규칙이 이들을 보호했는지 살펴보겠습니다.
내 데이터베이스가 저장하는 유일한 정보는 게시물에 관한 것입니다. 다음과 같습니다.

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

분명히 내
그런 다음 내
내 useEffect() 후크의 나머지 부분과 데이터를 검색하고 배치하기 위해 함께 작동하는 방식을 보려면 에 대한 내 게시물을 확인하십시오.
이전에는
그리고 그게 다야! 이제 내 규칙은 안전합니다. 🎉 보안 유출에 기여하지 않는 것이 더 좋지만 더 이상 걱정스러운 이메일을 받지 않습니다.
참고: 인증이 설정되어 있거나 광범위한 데이터베이스 계층화 및 보안 규칙이 필요한 경우this is a good blog post를 참조하십시오.
블로그는 계획대로 운영되고 있었는데 어느 날 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를 참조하십시오.