API 키와 기타 민감한 정보를 안드로이드의 GitHub에 업로드하지 않도록 하는 방법


표지 사진: Bruno Martins @ Unsplash

면책 성명
  • 은 어떠한 조치로도 당신의 응용 프로그램의 안전을 보장할 수 없습니다.하나의 응용 프로그램을 보호하려면 여러 가지 조치와 even sophisticated ones can eventually be cracked이 필요하다.
  • 즉, 본 강좌는 모든 안전 문제를 해결하는 묘약이 아니라 응용 프로그램 정보의 유출 위험을 낮출 수 있는 조치 중 하나이다.

  • TL;박사 01 명
  • API 키는 특정 서비스의 사용자를 인증하는 데 사용됩니다.
  • 은 열쇠 등 민감한 정보를 누설하면 의외의 사용과 결과를 초래할 수 있다.
  • Gradle의 BuildConfig은 로컬 파일에서 민감한 값을 읽고 생성된 코드를 통해 프로젝트에 제공할 수 있습니다.

  • 배경.
    민감한 정보를 누설하면 우리 자신뿐만 아니라 also to users of our projects에도 손해를 끼칠 수 있다.
    비록 내가 주목하는 것은 API 키이지만, 이러한 방법을 통해 단점과 증빙 등 다른 민감한 정보도 로컬에서 저장할 수 있다.

    무슨
    우선, 우리가 이야기한 것이 같은 일이라는 것을 확신합시다.
  • 클라이언트는 <1>형 클라이언트-서버에서 서버가 제공하는 서비스를 이용한 소프트웨어나 하드웨어를 말한다.
  • API는 응용 프로그램 프로그래밍 인터페이스를 대표하는데 이것은 기본적으로 프로그램 간 통신에 반드시 준수해야 하는 규칙이고 보통 클라이언트와 서비스 <2>이다.
  • API secret, token 또는 키는 API 서비스 <3>에서 클라이언트를 검증하는 데 사용되는 유일한 식별자입니다.
  • 코드 생성은 컴파일러가 코드 표시를 기계 <4>의 실행하기 쉬운 코드 표시로 바꾸는 과정이다.

  • 무엇 때문에
  • API 키는 사용자를 식별하는 방법으로 특정 목적을 위해 생성됩니다.따라서 사용자 계정의 비용은 일반적으로 서비스 사용 할당량에 버금간다-구글 지도 플랫폼은 바로 좋은 예이다. 예를 들어 prices vary depending on how services are used이다.
  • 은 이러한 키를 공개적으로 공개하지 않는 것이 의외의 사용을 방지하는 데 매우 중요하다.
  • 그럼에도 불구하고 API 키 버전 제어는 오류입니다. 저는 과거에 이 오류를 범했을 뿐만 아니라, 다른 초급과 고급 개발자들도 이 오류를 범한 것을 보았습니다.
    불행하게도 정보 안전(또는 정보 안전) 실천은 우리 개발자 지역사회에서 여전히 매우 나쁘게 전파되고 있다.

    어떻게

  • Gradle's BuildConfig class은 로컬 파일에서 값을 읽고 응용 프로그램이 사용하는 코드를 생성할 수 있도록 합니다.
  • 이 파일을 .gitignore에 올바르게 추가하면 GitHub, GitLab 또는 이와 유사한 플랫폼에서 API 키를 공개하는 데 큰 문제가 없을 것입니다.

  • 비밀 번호
    8단계가 있습니다.

    1. 루트 디렉토리에 keys.properties 만들기
  • 은 프로젝트의 루트 디렉토리에 keys.properties이라는 파일을 만들고 다음과 같이 API 키를 파일에 추가합니다.
  • api.key=API_KEY_HERE
    

    2. 파일 경로를 .gitignore에 추가
  • 버전 관리를 방지하려면 다음과 같이 파일 경로를 keys.properties 파일에 추가합니다.
  • /keys.properties
    

    3. 루트 디렉토리에 .gitignore 만들기
  • keys.gradle의 키를 검색하기 위해 프로젝트 루트 디렉터리에 keys.properties이라는 파일을 추가하고 다음과 같은 keys.gradle 코드를 추가해야 한다.
  • // Define how to load a string from a properties file:
    def getStringFromFile(fileName, property) {
        Properties props = new Properties()
    
        props.load(project.rootProject.file(fileName).newDataInputStream())
    
        return props[property].toString()
    }
    
    
    // Specify keys.properties file as the source
    def getStringFromKeysFile(property) {
        return getStringFromFile('keys.properties', property).toString()
    }
    
    
    // Expose the key defined in keys.properties as a variable available for the whole project
    ext.keys = ["apiKey": getStringFromKeysFile('api.key'),]
    

    4. Groovykeys.gradle 내부로 가져오기
  • 에서 정의한 방법을 사용하려면 프로젝트의 project/build.gradle 파일에서 파일을 가져오십시오.
  • buildscript {
        apply from: project.rootProject.file("keys.gradle")
    
        ...
    
    }
    
  • 이때, keys.gradle은 자동으로 키를 컴파일러 코드로 변환할 수 있지만, 우리는 6단계에서 완성할 것이다.

  • 5. build.gradle의 키에 상수 정의
  • 은 어플리케이션의 BuildConfig 파일에 다음과 같이 app/build.gradle이라는 상수를 정의합니다.
  • android {
    
    ...
    
        buildTypes {
    
         // Although it's set to 'debug', certify what build variants (say debug, staging, release) will need to access the key:
            debug {
    
                ...
    
                it.buildConfigField "String", "API_KEY", keys.apiKey
            }
    }
    

    6. 항목 정리 및 재컴파일
    코드를 효과적으로 생성하려면 안드로이드 스튜디오의 위쪽 메뉴에서 Build>Clean Project를 선택하고 Build>Rebuild Project를 선택합니다.
    7. 프로젝트 내부에서 API_KEY을 통해 관건 변수 호출
  • 은 필요할 때 단계 5에서 명명한 상수를 build.gradle이라고 한다.예를 들면 다음과 같습니다.
  • class CustomApplication : Application() {
        override fun onCreate() {
            super.onCreate()
    
            Firebase.init(this, BuildConfig.API_KEY)
        }
    }
    

    8. 팀 내 안전 공유 BuildConfig
  • 은 API 키의 버전 제어를 피하기 때문에 개발팀 구성원들 사이에서 BuildConfig.API_KEY 파일을 안전하게 공유해야 한다.
  • 만약에 회사에 정보안전팀이 있다면 그들과 파일을 공유하는 가장 좋은 방식을 확인하세요.
  • 이 아니라면 1Password와 같은 해결 방안은 사용자 권한을 관리하는 방식을 제공하기 때문에 좋은 선택이 될 수 있다.

  • 마지막 고려
  • 기타 민감한 정보, 예를 들어 단점과 증빙서류도 이런 방법을 통해 현지에서 보존할 수 있다.
  • 개의 이름, 예를 들어 keys.properties, keys.properties, keys.propertiesapi.key은 모두 임의이다. 이름을 바꿀 때 그것들의 확장명만 보존하면 된다(keys.gradle, API_KEY, .properties).
  • .key은 컴파일 코드를 생성합니다. 이것은 역방향 프로젝트인 우리 프로그램의 .gradle이 API 키와 다른 비밀을 폭로할 수 있음을 의미합니다.
  • 은 보안 조치의 조합만이 응용 프로그램의 안전을 보장할 수 있습니다.코드 최적화와 모호 처리 도구, 예를 들어 R8을 연구하여 정보 유출의 가능성을 줄인다.
  • 특히 빅토르 비엘라가 1년 전에 나에게 이런 방법을 가르쳐 줘서 고맙다.Walmyr Carvalho가 dev.to를 쓰도록 격려해 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기