본문 바로가기
윅스 (Wix) 홈페이지 만들기/윅스 코딩 (Wix Code - Corvid)

윅스 (Wix) 코딩 - 보안 고려 사항 (Wix Code: Security Considerations)

by 라임쥬서(Lime Juicer) 2020. 5. 1.
반응형

윅스 (Wix) 코딩 - 보안 고려 사항 (Wix Code: Security Considerations)

 

 

 

설명)

일반적으로 사이트는 아무 것도 하지 않아도 안전합니다. 윅스가 당신을 위해 보안관련 사항을 처리합니다. 그러나 민감한 데이터를 사이트의 방문자에게 노출시키지 않도록 주의해야하는 경우가 있습니다.

 

데이터베이스 컬렉션 권한 (Collection Permissions)

가능한 제한적인 데이터베이스 컬렉션의 권한을 항상 설정해야합니다. 추가 역할에 권한을 부여할 특정 이유가 없으면 각 권한은 관리자 역할에만 부여해야합니다. 더 많은 역할에 대한 권한을 부여할 이유가 있는 경우에도 필요한 역할에만 권한을 부여해야합니다.

 

다음은 이 점을 설명하기위한 몇 가지 예입니다.

 

- 양식 제출 - 누구나 사용할 수 있는 입력 양식이 있다고 가정합니다. 양식이 연결된 데이터베이스 컬렉션에서 누구나에 대한 작성 권한을 설정해야합니다. 하지만 다른 모든 권한은 관리자 역할로만 제한해야합니다.

- 읽기 - 관리자

- 만들기 - 누구나

- 업데이트 - 관리자

- 삭제 - 관리자

 

 

- 사이트 콘텐츠 - 데이터베이스 컬렉션의 콘텐츠를 누구에게나 표시하는 페이지가 있다고 가정합니다. 해당 컬렉션의 읽기 권한을 모든 사용자 역할로 설정해야합니다. 하지만 다른 모든 권한은 관리자 역할로만 제한해야합니다.

- 읽기 - 누구나

- 만들기 - 관리자

- 업데이트 - 관리자

- 삭제 - 관리자

 

 

 

- 회원이 생성한 콘텐츠 - 회원이 작성 및 게시하는 누구나 볼 수 있는 섹션이 있다고 가정합니다. 작성한 회원만이 콘텐츠를 업데이트하거나 삭제할 수 있어야 합니다. 다음과 같이 권한을 설정해야합니다.

- 읽기 - 누구나

- 만들기 - 사이트 멤버

- 업데이트 - 사이트 멤버 작성자

- 삭제 - 사이트 멤버 작성자

 

 

컬렉션 사용 권한 모델에는 위에 언급된 것과 같은 일반적인 시나리오에 대한 사용 권한을 자동으로 설정하는 여러 사전 설정이 포함되어 있습니다. 역할 및 사전 설정에 대한 자세한 내용은 [Wix 코드/코딩] 컬렉션 권한  (About Collection Permissions)을 참조합니다.

 

 

데이터베이스 컬렉션 기능을 사이트에 노출하지 않아도 컬렉션에 권한을 부여할 때는 주의해야합니다.

 

다음은 이 점을 설명하기 위한 몇 가지 예입니다.

- 사이트에 사용자가 특정 컬렉션에 대한 콘텐츠를 만들 수 있는 양식이 없으면 해당 컬렉션에 대한 작성 권한을 누구나 안전하게 부여할 수 있다고 생각할 수 있습니다. 그건 옳지 않은 생각입니다. 사용자가 데이터베이스 컬렉션에 콘텐츠를 만들 수 있는 양식이 없더라도 악의적인 사용자는 여전히 데이터베이스 컬렉션에 데이터를 삽입할 수 있습니다. 그러나 작성 권한을 관리자 역할로만 제한하면 데이터베이스 컬렉션은 보호됩니다.

- 사이트의 페이지에서 사용하지 않는 내부용 데이터베이스 컬렉션이 있는 경우 해당 컬렉션에 대한 읽기 권한을 누구나 안전하게 부여할 수 있다고 생각할 수 있습니다. 그건 옳지 않은 생각입니다. 컬렉션을 사용하는 페이지가 없더라도 악의있는 ​​사용자는 여전히 데이터베이스 컬렉션의 데이터를 읽을 수 있습니다. 그러나 읽기 권한을 관리자 역할로만 제한하면 컬렉션이 보호됩니다.

 

 

 

 

특수 상황 (Special Situations)

때로는 특정 상황에서만 또는 특정 사용자에게만 수집 데이터에 대한 액세스 권한을 부여해야 할 수 있습니다. 컬렉션 데이터를 허용된 역할을 가진 모든 사용자에게 항상 공개하기 때문에 컬렉션의 권한 변경은 이러한 경우에는 작동하지 않습니다. 대신 대부분의 상황에 맞게 컬렉션 권한을 설정할 수 있습니다. 어떤 방식으로 컬렉션에 액세스하기 위해 다른 역할을 가진 사용자가 필요하면 백엔드 코드에서 해당 작업을 수행할 수 있습니다.

 

백엔드에서 특정 wix-data 함수를 호출할 때 WixDataOption 객체를 사용하여 작업을 실행할 때 권한 검사를 억제할 수 있습니다. 따라서 컬렉션 권한이 관리자 역할로 제한되어 있고 현재 사용자의 역할에 해당 작업에 대한 권한이 부여되지 않은 경우에도 필요한 모든 작업을 수행할 수 있습니다. 그러나 내보낸 백엔드 코드는 아래에 설명된 것처럼 누구든지 호출할 수 있습니다. 따라서 권한 검사를 억제하는 백엔드 기능은 컬렉션에 액세스하기 전에 적절한 검사를 수행해야합니다. 또한 절대적으로 필요한 경우에만 권한 검사를 억제합니다. 필요하지 않은 경우 권한 검사는 백엔드 작업조차도 해당 작업에 대한 권한이 부여된 사용자에 대해서만 실행되도록합니다.

 

 

코드 공개 여부 (Code Visibility)

모든 페이지, 사이트 및 공개 코드는 귀하의 사이트를 방문하는 모든 사용자가 볼 수 있습니다. 암호로 보호되지 않은 페이지 또는 구성원 전용 페이지의 페이지 코드조차도 암호가 없고 구성원이 아닌 사용자라도 사이트 방문자가 보고 조작할 수 있습니다. 따라서 페이지, 사이트 또는 공개 코드에 민감한 정보를 노출시키지 않는 것이 매우 중요합니다.

 

사이트 방문자는 백엔드 코드를 볼 수 없습니다. 민감한 정보를 사용하는 것이 안전합니다. 그러나 악의적인 방문자가 내보낸 백엔드 기능이 무엇인지 알지 못하더라도 여전히 존재하는 것을 볼 수 있고 원하는 인수로 호출하고 반환 값을 검사할 수 있습니다. 따라서 잠재적으로 유해한 작업을 수행하거나 중요한 정보를 반환하기 전에 내보낸 백엔드 코드에 일종의 유효성 검사 메커니즘이 포함되어야합니다. 또한 공개 코드에서 호출되지 않은 백엔드 함수는 내보낼 수 없습니다.

 

 

API 키 (API Keys)

Fetch API를 사용하여 API 키 또는 기타 중요한 정보가 필요한 타사 서비스에 액세스하는 경우 해당 정보를 사이트의 백엔드 섹션이나 제한적인 권한이 있는 데이터베이스 컬렉션에 저장해야합니다. 페이지, 사이트 또는 공개 코드에서 API 키를 사용하지 않습니다. 대신 API 키를 사용하여 타사 서비스를 호출하고 페이지, 사이트 또는 공개 코드에서 해당 기능을 호출하는 백엔드 웹 모듈에 함수를 만듭니다.

 

유효성 검사 및 검사 (Validations and Checks)

코드에서 보안 검사 또는 유효성 검사를 수행하려면 항상 백엔드 코드를 사용해야합니다. 페이지, 사이트 또는 공개 코드의 모든 확인 및 유효성 검사는 악의적인 사이트 방문자가 쉽게 노출되어 조작하고 우회할 수 있습니다.

예를 들어, 특정 사용자에게 비밀 키를 표시하기위한 다음 페이지 코드를 고려합니다.

 

 

export function secretButton_click(event) {
  wixUsers.currentUser.getEmail()
    .then(userEmail => {
      if (userEmail === "secretEmail@mail.com") {
        // show secret key 
        $w("#secretText").text = "43ne5gfou94tfe";
      } else {
        // show denial message
        $w("#secretText").text = "Access denied!";
      }
    ) };
}

 

이 코드에는 두 가지 주요 문제점이 있습니다.

1. 보안 점검은 모든 사이트 방문자에게 공개됩니다. 누구든지 올바른 이메일 주소가 secretEmail@mail.com임을 알 수 있습니다.

2. 민감한 정보가 모든 사이트 방문자에게 공개됩니다. 누구든지 비밀 코드가 43ne5gfou94tfe임을 알 수 있습니다.

이렇게 하는 올바른 방법은 다음과 같이 보안 검사와 비밀 코드를 백엔드 웹 모듈로 이동시키는 것입니다.

 

// In backend file: secureModule.jsw

import wixUsers from 'wix-users-backend';

export function secureCheck() {
  let currentUser = wixUsers.currentUser;
  return currentUser.getEmail()
    .then( (userEmail) => {
      if(userEmail === "secretEmail@mail.com") {
        return "/secret-page";
      } 
      else {
        return "/not-allowed"
      }
    } )
    .catch((err) => {
      return err;
    } );
}

 

악의적인 사용자가 백엔드 기능을 호출할 수는 있지만 민감한 정보가 공개되지 않았기 때문에 아무 정보도 얻을 수 없습니다. 다음과 같이 페이지 코드에서 이 함수를 안전하게 호출할 수 있습니다.

 

import {secureCheck} from 'backend/secureModule'; 

export function secretButton_click(event) {
  return secureCheck()
    .then( (message) => {
      $w("#secretText").text = message;
    } );
}

 

 

이 페이지 코드는 모든 사이트 방문자에게 표시됩니다. 그러나 모든 로직이 백엔드 코드로 이동되었기 때문에 코드를 보면 악의적인 사용자에게 민감한 정보가 누출되지 않습니다.

 

웹 모듈 권한 (Web Module Permissions)

웹 모듈에서 개별로 내보내는 각 함수를 호출할 수 있는 사용자를 정의하는 권한을 설정할 수 있습니다. 자세한 내용은 

윅스 (Wix) 코딩 -  모듈 권한 (Wix Code: About Web Module Permissions)를 참조합니다.

 

데이터베이스 컬렉션에 개인 정보 저장 (Storing Personal Information in a Collection)

사이트 구성원 작성자만 콘텐츠를 읽거나 업데이트하거나 삭제할 수 있도록 컬렉션 권한을 설정하면 사이트 방문자의 개인 정보를 컬렉션에 저장할 수 있습니다.

 

내장된 연락처 목록을 사용하여 방문자의 정보를 저장할 수도 있습니다. 이렇게하면 Wix가 연락처 목록에 사용할 수 있는 다른 모든 기능과 함께 이 정보들을 사용할 수 있습니다. 그런 다음 Wix Code API를 사용하여 사이트 구성원이나 연락처 데이터와 관련된 작업을 수행할 수 있습니다.

 

다음 API를 사용할 수 있습니다.

- wix-crm

- wix-crm-backend

- wix-users

- wix-users-backend

 

 

연관된 토픽)

 

 

윅스 홈페이지 만들기 101

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index

 

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index

윅스 (Wix) 홈페이지 만들기 101 - E-Book - Index 윅스 (Wix.com) 윅스 ADI & 템플릿 (Wix ADI & 템플릿) 윅스 웹에디터 (Wix Editor) 윅스 코딩 (Wix Code - Corvid) 윅스 해커톤 (Wix Hackathon)

limejuicer.tistory.com

 

출처 :

https://support.wix.com/en/article/wix-code-security-considerations

 

반응형

댓글