Recentemente, muitas vezes eles começaram a me fazer uma pergunta sobre o quão seguro é usar várias extensões prontas, ou seja, pacotes escritos para o idioma R, existe a chance de a conta de publicidade cair nas mãos erradas
Neste artigo, falarei detalhadamente sobre como o mecanismo de autorização funciona na maioria dos pacotes e APIs de serviços de publicidade e como usar os pacotes descritos no artigo da maneira mais segura possível.
As informações contidas neste artigo não são tecnicamente as mais fáceis, portanto, para que o texto não seja tão árduo e técnico quanto a ajuda usual, ouso tentar o papel de um guia e guiará você pelos materiais deste artigo para sua percepção mais simples.
Nosso ônibus já chegou, sente-se e confira nosso itinerário atual.
Conteúdo
- Como o processo de autorização funciona nos serviços de publicidade mais modernos
- De onde veio a pergunta de segurança
- O que o ameaça com uma intercepção de token
- O que fazer se alguém tomou posse do seu token
Como usar com mais segurança os pacotes R para trabalhar com os sistemas de publicidade da API
5.1 ryandexdirect e rym - Pacotes para trabalhar com as APIs Yandex.Direct e Yandex.Metrica
5.2 rfacebookstat- Pacotes para trabalhar com a conta de publicidade do Facebook
5.3 rvkstat - Pacotes para trabalhar com a conta VK
5.4 rmytarget - Pacotes do painel MyTarget
- Conclusão
Como o processo de autorização funciona nos serviços de publicidade mais modernos
O ponto de encontro do nosso grupo de excursão é o protocolo OAuth.

Quase todos os serviços com os quais a API eu tive que trabalhar executam a autorização usando o protocolo OAuth 2.0, eles já escreveram com mais detalhes sobre isso no hub, que estão interessados em dar uma volta pela natureza, por favor, você tem essa oportunidade, pode fazê-lo aqui e aqui .
Se você explica seu significado em poucas palavras, o OAuth permite que o aplicativo (no nosso caso, o pacote R seja um aplicativo), ao qual você concedeu permissão, execute algumas ações em seu nome, sem a necessidade de transferir seu nome de usuário e senha da conta de publicidade para esse aplicativo, novamente por razões de segurança.
Em vez de um nome de usuário e senha, o protocolo OAuth usa um token, é uma sequência gerada que consiste em um conjunto de letras e números, que armazena informações na forma criptografada:

- Em nome de qual usuário o aplicativo executa a solicitação
- O usuário realmente permitiu que esse aplicativo acesse seus dados
- O próprio usuário tem as permissões necessárias para trabalhar com os materiais publicitários aos quais ele se refere
Para o processo de autorização e o trabalho com a API, geralmente você precisa registrar o aplicativo na API. Além disso, esse aplicativo deve receber confirmação da equipe de suporte da API de um sistema de publicidade específico, ou seja, o autor descreve inicialmente detalhadamente como e por que ele usará a API, tudo isso é verificado, moderado e somente se o suporte ao lado da plataforma de publicidade não tiver perguntas de segurança o autor do pacote terá acesso à API e, com a ajuda de seu aplicativo registrado, você pacote, você pode se autenticar usando o ID e o segredo emitidos para este aplicativo.
De onde veio a pergunta de segurança
Estamos seguindo em frente, vamos tentar descobrir onde a questão de segurança surgiu ao usar pacotes?

Em geral, a questão da segurança do acesso aos painéis de publicidade é mais do que justificada, uma vez que os escritórios de publicidade têm dinheiro, e geralmente não são pequenos o suficiente, então a segurança das contas de publicidade é uma questão muito mais séria do que a segurança do acesso, por exemplo, a um perfil de usuário comum nas redes sociais.
O fato é que, na maioria dos casos, ao autorizar, o R redireciona os usuários dos pacotes para o navegador, inicialmente para confirmar o acesso à conta; nesse momento, você está na página de serviço da API com a qual trabalhará. Após a confirmação, o usuário é redirecionado para a página em que o token será gerado ou o código de confirmação da autorização, que deve ser posteriormente inserido no R.
Portanto, a maioria dos usuários está preocupada porque os sites em que o próprio token ou o código de confirmação de autorização são gerados são de terceiros e não têm nada a ver com o próprio serviço de publicidade, é claro que eles têm um contador do Google Analytics ou um Yandex.Metrica e o proprietário do site, que na maioria dos casos também é o autor do pacote, de acordo com muitos, através deste site, ele pode se apossar de seus tokens e obter acesso para gerenciar seus materiais de publicidade por meio deles.
O que o ameaça com uma intercepção de token
Vamos falar sobre o que geralmente permite que você faça um token se ele cair nas mãos de um invasor.
O token deve ser armazenado da mesma maneira que todos os outros dados necessários para acessar a conta, ou seja, se o token cair nas mãos erradas, quem o possui poderá gerenciar seus materiais de publicidade: exclua-os, altere, por exemplo, será possível alterar o texto do anúncio e o link para o qual ele leva.
A boa notícia é que, como escrevi acima, o protocolo OAuth permite que você gerencie seus materiais de publicidade sem fornecer um nome de usuário e senha de sua conta, ou seja, mesmo que alguém tenha tomado posse do seu token, ele não poderá roubar sua conta com a ajuda dele. Nem uma única API permite que você solicite, e mais ainda, altere sua senha para não perder sua conta, mas é fácil anunciar seu site por meio dela.
O que fazer se alguém tomou posse do seu token
Se aconteceu que você acidentalmente transferiu seu token, não entre em pânico. Na verdade, esse não é o fim do mundo; na maioria dos casos, existem várias ações que redefinem tokens emitidos anteriormente; por exemplo, nesta seção da referência da API Yandex.Direct, o processo de recuperação de tokens emitidos anteriormente é descrito em detalhes.
Na maioria dos casos, independentemente da API do sistema de publicidade em que você estiver trabalhando, basta alterar a senha da sua conta.
Como usar com mais segurança os pacotes R para trabalhar com os sistemas de publicidade da API
E agora que chegamos à parte mais interessante de nosso tour, falarei sobre como é mais seguro usar os pacotes que desenvolvi, já que estou familiarizado com as APIs dos sistemas com os quais trabalham.
Quero observar que todos os tokens emitidos são armazenados no lado da plataforma de publicidade, e não o aplicativo pelo qual o pacote R funciona, portanto, mesmo o usuário do aplicativo registrado para trabalhar com a API da plataforma de publicidade não tem acesso ao próprio token.
ryandexdirect e rym - Pacotes para trabalhar com as APIs Yandex.Direct e Yandex.Metrica
Ambos os pacotes usam o serviço Yandex OAuth; para obter mais detalhes, consulte este link .
Existem 2 funções no pacote ryandexdirect para autorização:
yadirAuth
- autorização em duas etapasyadirGetToken
- solicitação de um token de autorização
Ao usar a função yadirAuth, ou seja, eu recomendo usá-la ao trabalhar com o ryandexdirect, o processo de autorização prossegue de acordo com o esquema descrito aqui , a única vulnerabilidade nesse caso é o período a partir do momento em que o código de confirmação é gerado até que seja inserido no console R.
Explicarei o motivo: veja como o Google Analytics exibe dados sobre visitas à página de geração de código de verificação .

I.e. o código vem após o sinal '?' e é considerado um parâmetro GET que captura o contador do Google Analytics, mas a vida útil desse código de confirmação termina imediatamente após o uso, ou seja, logo após inseri-lo no console R. A vida útil máxima desse código é de 10 minutos.
A segunda função, yadirGetToken
, executa a autorização de acordo com o outro esquema descrito aqui . E ao usá-lo, nenhum código de confirmação é gerado, ou seja, Depois de conceder ao pacote permissão para acessar os dados, você acessa a página de geração de token. O token no próprio URL é retornado após o sinal '#', este não é um parâmetro get, mas uma âncora ou, como essa parte do URL também é chamada de hash. O navegador não transmite esses dados; portanto, não é transferido para os relatórios do Google Analytics, ou seja, as visitas a esta página nos relatórios são exibidas assim:

Nesse segundo caso, não há riscos, mas o menos do uso da função yadirGetToken é que ela não salva as credenciais em um arquivo no seu PC e, portanto, não pode usar esses dados entre diferentes sessões R, o que não é muito conveniente. Você armazenará o token obtido com sua ajuda e usará nos scripts como uma sequência de texto, a vida útil desse token é de 1 ano, após o qual o pacote não poderá substituí-lo automaticamente, como acontece ao usar a função yadirGetAuth.
Existe uma função rym_auth no pacote rym para autorização, que é um análogo completo da função yadirAuth, cujo esquema de operação já descrevi em detalhes.
rfacebookstat - Pacotes para trabalhar com a conta de publicidade do Facebook
O processo de autenticação na API de marketing do Facebook é descrito em detalhes aqui .
Para passar a autorização, o pacote rfacebookstat tem a função fbGetToken
, funciona da mesma forma que a função yadirGetToken
descrita anteriormente no pacote ryandexdirect, ou seja, tudo é implementado através da autenticação em uma etapa. Não há perigo de que seu token seja interceptado por meio dos relatórios do Google Analytics; há uma tela de como é a aparência de uma visita à página de geração de token no Google Analytics.

rvkstat - Pacotes para trabalhar com a conta VK
O processo de autenticação do Vkontakte é descrito na Ajuda da API .
No rvkstat, você pode usar uma das duas funções para autorização:
vkAuth
fornece autenticação em duas etapas, essencialmente um análogo da função yadirAuth
descrita no início deste bloco, mas apenas para autorização na API do Vkontakte e não no Yandex.
A peculiaridade de trabalhar com a API Vkontakte nesse caso é que o registro do aplicativo e o acesso à API são bastante simples, não é necessário preencher os formulários nos quais você deve descrever em detalhes como e por que usar a API. Portanto, como você usa seu aplicativo ao trabalhar com o rvkstat, mesmo a interceptação do código de confirmação não funciona, porque ele está vinculado ao seu aplicativo e, para interceptar um token, é necessário conhecer o ID e o segredo do seu aplicativo; o código em si não permitirá que você obtenha um token para você.
A função vkGetToken
permite que você obtenha o token da maneira mais rápida; além disso, o token recebido está vinculado ao dispositivo do qual foi solicitado, ou seja, mesmo que alguém entenda, ele pode usá-lo apenas no mesmo PC em que foi solicitado. Ao mesmo tempo, o token no URL ao gerar é após o sinal '#' e, como eu disse anteriormente, ele não entra nos relatórios do Google Analytics.

No momento, existem três esquemas de autorização na API MyTarget. Para obter detalhes sobre cada um, consulte a documentação .
A função myTarAuth destina-se à autorização na API MyTarget em rmytarget; por padrão, ela usa o esquema de autorização Grant Grant do Código de Autorização , que permite trabalhar com a API MyTarget sem ter que acessá-lo pessoalmente. I.e. Já registrei o aplicativo, ele foi aprovado pelo suporte da API MyTarget e você concede acesso a ele para trabalhar com a conta em seu nome.
O código de autorização concedido é um esquema de autorização em dois estágios, que é semelhante ao implementado pela função yadirAuth
no pacote ryandexdirect.
Funciona da seguinte maneira:
- Você inicia a função, após a qual o navegador é aberto.
- Na página de serviço MyTarget, você dá permissão para acessar sua conta.
- Você será redirecionado para a página do pacote em que o código de confirmação é gerado. A vida útil máxima desse código é de 1 hora, mas termina imediatamente após o recebimento de um token.
- Você insere o código de confirmação copiado no console do R e obtém um token para trabalhar com a API.
Nesse caso, o código de confirmação é um parâmetro get e é registrado nos relatórios do Google Analytics.

Mas, se você observar com atenção, além do código (obter o código do parâmetro) , a URL contém mais um parâmetro - state . Essa é uma sequência, também um token que é gerado pelo próprio pacote rmytarget e enviado ao navegador imediatamente após o início da função, esse parâmetro é exclusivo e o código de confirmação de autorização é anexado a ele. Mesmo se você interceptar o código de confirmação e o token de estado, ainda não poderá usar essa combinação porque Em primeiro lugar, não há lugar para inserir o token do estado, e como eu já escrevi, ele é único e, mesmo que houvesse um local para inseri-lo, ele não pode ser enviado novamente. Portanto, esse esquema de autorização é totalmente seguro.
Mas, mesmo assim, essa opção ainda parece suspeita para você, então rmytarget e a função myTarAuth
permitem usar os dois esquemas de autorização restantes:
- Concessão de credenciais de cliente , usada para trabalhar com dados pessoais da conta por meio da API
- Concessão de credenciais de cliente da agência , usada para trabalhar com os dados de seus próprios clientes de agências / gerentes.
Nesse caso, você deve acessar de forma independente a API do MyTarget, no momento em que ela só pode ser obtida por entidades legais e é emitida manualmente. Para solicitar o acesso, é necessário usar o formulário de feedback. Você pode encontrar todos os detalhes aqui .
Portanto, se você ainda conseguiu registrar seu aplicativo para trabalhar com a API MyTarget, é possível autenticar com facilidade usando um dos dois esquemas listados acima, usando a função myTarAuth
, para isso, transmita o valor FALSE ao argumento code_grant e use os seguintes argumentos:
- grant_type - O tipo de sua conta, nesse caso, uma conta de cliente comum, aceita os valores "client_credentials" ou "agency_client_credentials".
- agency_client_name - login do cliente a partir da conta do agente, usada apenas se grant_type = "agency_client_credentials".
- client_id - o ID é emitido para você ao confirmar o acesso à API MyTarget.
- client_secret - Emitido a você quando você confirma o acesso à API MyTarget junto com o ID do cliente.
Código de exemplo de autorização de concessão de credenciais de cliente myTargetAuth <- myTarAuth(code_grant = FALSE, grant_type = "client_credentials", client_id = "XXXXXXXXXX", client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
Código de amostra para esquema de autorização Concessão de credenciais do cliente da agência myTargetAuth <- myTarAuth(code_grant = FALSE, grant_type = "agency_client_credentials", client_id = "XXXXXXXXXX", client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", agency_client_name = "xxxxxxxxx@agency_client")
No caso de usar essa abordagem, a autenticação passará sem nenhuma interação com o site do pacote rmytarget.
Conclusão
É aqui que o nosso tour termina, já que hoje mais de 10.000 pacotes são publicados nos repositórios principais - CRAN e mais de 80.000 no GitHub. Concluindo, quero dizer mais algumas palavras sobre a segurança de seu uso.
Antes de tudo, preste atenção se existe um pacote que você precisa no CRAN, uma vez que este é o repositório oficial da linguagem R, os pacotes estão sujeitos a moderação bastante rigorosa por uma equipe de especialistas desse repositório antes de serem publicados lá. E o pacote não será publicado lá até que seja totalmente compatível com a política do CRAN . Portanto, se o pacote estiver presente no CRAN, você poderá ter certeza de que seu uso é seguro para você.
Além disso, quero observar que o código de todos os pacotes para a linguagem R está aberto; você sempre pode visualizar o código de qualquer uma de suas funções antes de iniciá-lo.
Tente também encontrar artigos sobre a aplicação deste pacote, os usuários do R estão bastante dispostos a compartilhar informações e provavelmente encontrará casos de uso de pacotes mais ou menos populares. Se eles escrevem sobre um pacote, significa que o estão usando e, aparentemente, ninguém teve problemas com ele.
Veja também quem é o autor do pacote, existem duas maneiras de fazer isso:
- Depois de instalar o pacote, execute o
utils::packageDescription("_")$Author
- Veja o arquivo DESCRIPTION na fonte do pacote.
Tente encontrar algumas informações sobre o autor em uma rede mundial. Se uma pessoa é pública, pelo menos, é improvável que ela arrisque sua reputação para obter um sinal de acesso à sua conta de publicidade e seus materiais de publicidade. Muitas vezes, uma reputação é mais cara que o dinheiro recebido de maneira dúbia.
Se você instalar um pacote do GitHub, em seguida, instale-o no repositório do autor, e não em qualquer filial, como regra, existem muitas ramificações nos repositórios populares:

O fato é que as ramificações não são atualizadas pelo autor do pacote, o que significa que você não receberá a versão mais atual. Além disso, o usuário do GitHub que criou a ramificação pode fazer alterações no próprio código, independentemente de você decidir confiar nessas alterações.
Você pode ver em qual repositório sua ramificação foi criada em sua página no GitHub.

Não transfira seus tokens para ninguém sob nenhuma circunstância, armazene-os da mesma maneira que armazena senhas de contas, mesmo que você precise mostrar um exemplo de código, faça isso sem especificar tokens.
Lembre-se de que, na grande maioria dos casos, o uso de pacotes R é totalmente seguro para você. Espero que este artigo o convença e fale sobre como funciona o processo de autorização na API das plataformas de publicidade mais populares.
Boa sorte, tenha cuidado, mas não ceda à paranóia.