그래프 API 요청 보안

거의 모든 그래프 API 호출에 액세스 토큰이 필요합니다. 악의적인 개발자가 이러한 액세스 토큰을 훔쳐서 앱에서 스팸을 보내는 데 사용할 수 있습니다. Facebook에는 이를 감지하기 위한 자동 시스템이 있지만, API 요청에 매개변수를 추가하면 앱을 보호하는 데 도움이 됩니다. 이 문서에서는 매개변수를 통해 앱을 보호하는 방법을 설명합니다.

앱을 보호하는 방법으로는 Facebook에서 제공하는 두 가지 방법이 있습니다. 이 문서에서는 두 가지 방법으로 앱의 보안을 개선할 수 있는 몇 가지 방법을 살펴봅니다.

이 문서의 내용:

appsecret_proof로 그래프 API 호출 인증

그래프 API는 클라이언트 또는 클라이언트를 대신하여 서버에서 호출할 수 있습니다. 서버의 호출은 appsecret_proof라고 하는 매개변수를 추가하여 앱의 보안을 개선할 수 있습니다.

액세스 토큰은 이동 가능합니다. 클라이언트에서 Facebook의 SDK에 의해 생성된 액세스 토큰을 취하여 서버에 보낸 다음, 해당 서버에서 클라이언트를 대신하여 호출할 수 있습니다. 사용자 컴퓨터의 악성 소프트웨어 또는 메시지 가로채기(man in the middle) 공격에서 액세스 토큰을 훔칠 수도 있습니다. 그런 다음 클라이언트나 서버가 아닌 완전히 다른 시스템에서 이 액세스 토큰을 사용하여 스팸을 생성하고 데이터를 훔칠 수 있습니다.

서버의 모든 API 호출에 appsecret_proof 매개변수를 추가하고 모든 호출에 대해 인증서를 요청하도록 설정하여 이를 방지할 수 있습니다. 이렇게 하면 악의적인 개발자가 자신의 서버에서 다른 개발자의 액세스 토큰으로 API를 호출할 수 없게 됩니다. Facebook PHP SDK를 사용하고 있다면 appsecret_proof 매개변수는 자동으로 추가되어 있습니다.

인증서 생성

앱 시크릿 코드 인증서는 액세스 토큰의 sha256 해시로 앱 시크릿 코드를 키로 사용합니다. PHP에서 호출은 다음과 같이 구성되어 있습니다.

$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret); 

매개변수 추가

결과를 각 호출에 appsecret_proof 매개변수로 추가합니다.

curl \
  -F 'access_token=<access_token>' \
  -F 'appsecret_proof=<app secret proof>' \
  -F 'batch=[{"method":"GET", "relative_url":"me"},{"method":"GET", "relative_url":"me/friends?limit=50"}]' \
  https://graph.facebook.com

모든 호출에 대한 인증서 요구

앱 설정의 Advanced 섹션에서 appsecret_proof를 사용하도록 요구할 수 있습니다. 활성화된 경우 appsecret_proof가 포함된 API 호출만 허용됩니다.

이 설정을 변경하면 공격자가 앱 시크릿 코드까지 알고 있지 않는 한 훔친 액세스 토큰을 사용할 수 없습니다.

로그인 보안

그 밖에도 여러 설정을 변경하여 앱의 보안을 개선할 수 있습니다. 어떤 작업을 수행할 수 있는지는 로그인 보안 문서를 참조하세요.

고려해야 하는 다양한 아키텍처 및 보안 관련 사항이 설명되어 있는 액세스 토큰 문서도 참조하세요.