Product for Google IoT Solutions-5분 만에 Firebase 보안 및 규칙 파악

5477 단어 Firebase

배경

  • 과거 몇 차례 Firebase에 관한 기사를 썼다.이번에는 인증편입니다.
  • Product for Google IoT Solutions-Firebase 터치

  • Google IoT Solutions-Firebase 및 raspberry pi용 실시간 통신
  • Product for Google IoT Solutions. - Firebase 인증을 5분 만에 확인할 수 있습니다.
  • 문제

  • 이전 설명의 예는 다음과 같습니다
  •  var ref = new Firebase("https://{app_name}.firebaseio.com");
    
  • app_name이 그대로 공개되면 누구나 app_name를 사용하여 Firebase에 접근할 수 있습니다
  • 설명


  • 예를 들어 siteA의 app_name에서 사이트 A의 Firebase에 접근하여 사용자 A의 age를 30으로 설정합니다
  • 나쁜 사람은siteA의 app_사이트 B에서name를 사용하면userA의age를 20으로 변경할 수 있습니다
  • 그 결과 Firebase는 위험에 처했다
  • siteA


    코드

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
      <title>firebase test</title>
      <script src="https://cdn.firebase.com/js/client/2.4.1/firebase.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"/>
      <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
    </head>
    <body>
    <button id="login"  class="btn btn-primary">Firebase Twitter</button>
      <p id="result"></p>
      <script>
      var ref = new Firebase("https://{app_name}.firebaseio.com");
    
      $("#login").click(function () {
          ref.authWithOAuthPopup("twitter", function (error, authData) {
          if (error) {
            $("#result").text("Login Failed!");
          } else {
            $("#result").text("Authenticated successfully with payload");
            ref.set({age: 30});
            $("#result").text("ageを30に設定しました");
          }
        });
      })
    </script>
    </body>
    </html>
    

    실행 및 결과




    나쁜 사람


    코드

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
      <title>firebase test</title>
      <script src="https://cdn.firebase.com/js/client/2.4.1/firebase.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"/>
      <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
    </head>
    <body>
    <button id="login"  class="btn btn-primary">ageを変更</button>
      <p id="result"></p>
      <script>
      var ref = new Firebase("https://{app_name}.firebaseio.com");
            ref.set({age: 20});
            $("#result").text("ageを20に設定しました");
    </script>
    </body>
    </html>
    

    실행 및 결과




    대책 - Firebase의 보안 및 규칙 활용


    Firebase 보안 및 규칙 설정



    설명

  • Firebase의 console에서'Security & Rules'를 누르면 안전과 규칙 조작 화면이 나타납니다
  • 상기 그림의 내용에 따라 설정한다.
  • 모든 사용자의 관련 내용을 users에 추가합니다.uid 값을 통해 사용자를 구분할 수 있습니다
  • uid에서 uid가 있는 사용자만 읽기와 쓰기 권한을 설정합니다
  • 오른쪽 상단에 있는save 단추를 누르면 Firebase에 저장할 수 있습니다
  • siteA 코드

    ......
    ref.authWithOAuthPopup("twitter", function (error, authData) {
          if (error) {
            $("#result").text("Login Failed!");
          } else {
            $("#result").text("Authenticated successfully with payload");
            //ref.set({age: 30});
            ref.child('users').child(authData.uid).set({age:30});
            $("#result").text("ageを30に設定しました");
          }
    ......
    

    결과


  • 이렇게 되면 사용자가 인증하지 않은 상황에서 누구도 목표 사용자와 관련된 정보를 왜곡할 수 없다
  • 감상

  • Firebase의 안전성과 규칙은 안전을 확보한다
  • Firebase의 보안 응답은 다른 서비스와 다를 수 있습니다.
  • Firebase는 보안 규칙을 설정할 수 있습니다
  • 기타 서비스는 인증, 서버 측 권한 확인 등을 통해 안전을 확보한다
  • 좋은 웹페이지 즐겨찾기