使用R包与广告系统API一起使用有多安全?

最近,他们经常开始问我一个问题,即使用各种现成的扩展程序(例如, 以R语言编写的软件包,广告帐户有可能会落入错误的手里


在本文中,我将详细讨论授权机制如何在大多数广告服务的程序包和API中起作用,以及如何尽可能安全地使用本文中描述的程序包。


图片

因此,本文中的信息在技术上不是最简单的,因此,本文的内容不像通常的帮助那样枯燥和技术性,我敢于尝试使用指南的作用,并以最简单的方式向您介绍本文的内容。

我们的观光巴士已经到达,请您坐下并查看我们当前的行程。


目录内容


  1. 授权流程在大多数现代广告服务中的工作方式
  2. 安全性问题来自哪里
  3. 是什么威胁您进行令牌拦截
  4. 如果有人拥有了您的令牌怎么办
  5. 如何最安全地使用R包与API广告系统一起使用


    5.1。 ryandexdirect和rym-使用Yandex.Direct和Yandex.Metrica API的软件包
    5.2。 rfacebookstat-使用Facebook广告帐户的软件包
    5.3。 rvkstat-使用VK帐户的软件包
    5.4。 rmytarget-MyTarget仪表板软件包


  6. 结论

授权流程在大多数现代广告服务中的工作方式


我们的旅行组的聚会地点是OAuth协议。



我需要使用的API几乎所有服务都使用OAuth 2.0协议来执行授权,他们已经在集线器上写了有关它的更多详细信息,谁有兴趣在它的狂热中漫步,请,您有这样的机会,可以在这里这里进行


如果我们简略地解释其含义,则OAuth允许您授予其权限的应用程序(在我们的情况下,R包就是这样的应用程序)代表您执行某些操作,而无需将您的用户名和密码从广告帐户转移到此应用程序,再次出于安全原因。


OAuth协议使用令牌代替了登录名和密码,这是一个生成的字符串,由一组字母和数字组成,该字符串以加密形式存储信息:



  • 应用程序代表哪个用户执行请求
  • 用户是否真的允许此应用程序访问其数据
  • 用户本人是否具有使用他引用的那些广告材料所需的必要权限?

为了进行授权过程并使用API​​,通常需要在API中注册应用程序。 此外,此应用程序应从特定广告系统的API支持团队获得确认,即 作者最初详细描述了他将如何使用API​​的原因以及使用原因,所有这些都经过检查,审核,并且只有在广告平台一侧的支持没有安全性问题的情况下,软件包的作者才能访问API,并在其注册的应用程序的帮助下,软件包,则可以使用颁发给此应用程序的ID和密码进行身份验证。


安全性问题来自哪里


我们一直在前进,让我们尝试找出使用软件包时出现的安全性问题在哪里?



通常,访问广告面板的安全性问题是有充分理由的,因为广告办公室有钱,而且通常不够小,因此广告帐户的安全性比访问安全性(例如社交网络中常规用户配置文件的安全性)要严重得多。


事实是,在大多数情况下,R在授权时会将软件包的用户重定向到浏览器,最初是为了确认对帐户的访问,此时,您将使用要使用的API进入服务页面。 确认后,用户将重定向到将生成令牌或授权确认代码的页面,该页面随后必须输入到R控制台中。


因此,大多数用户担心,因为生成令牌本身或授权确认代码的网站是第三方,并且与广告服务本身无关,当然,他们拥有Google Analytics(分析)计数器或Yandex.Metrica计数器,并且该网站的所有者是,根据许多人的说法,在大多数情况下,它也是软件包的作者。通过该网站,它可以拥有其令牌并获得通过其管理广告材料的权限。


是什么威胁您进行令牌拦截


让我们谈谈如果令牌落入攻击者的手中通常可以使您制作令牌的内容。


令牌必须以与访问帐户所需的所有其他数据相同的方式存储,即 如果令牌落入不正确的人手中,那么拥有该令牌的人将可以管理您的广告材料:删除它们,进行更改,例如,可以更改广告的文字及其链接。


好消息是,正如我在上文中所述,OAuth协议使您可以在不提供帐户名和密码的情况下,就可以管理广告材料。 即使有人拥有了您的令牌,他也将无法在他的帮助下窃取您的帐户。 并非只有一个API允许您请求密码,甚至更多,因此,您需要更改密码,这样您就不会被带走您的帐户,但是通过您的帐户来宣传您的网站很容易。


如果有人拥有了您的令牌怎么办


如果您意外转移了令牌,请不要慌张。 实际上,这还不是世界末日,在大多数情况下,有很多操作可以重置先前发出的令牌,例如,在Yandex.Direct API参考的本部分中,将详细描述撤回先前发出的令牌过程。


在大多数情况下,无论您使用哪种广告系统API,只需更改帐户密码即可。


如何最安全地使用R包与API广告系统一起使用


现在,我们进入了巡演中最有趣的部分,然后我将讨论使用我开发的程序包最安全的方法,因为我非常熟悉它们所使用的系统的API。


我想指出的是,所有发行的令牌都存储在广告平台的一侧,而不是R包通过其工作的应用程序存储,因此即使是使用广告平台API的已注册应用程序的用户也无法访问令牌本身。


ryandexdirectrym-使用Yandex.Direct和Yandex.Metrica API的软件包


这两个软件包都使用Yandex OAuth服务;有关更多详细信息,请参阅此链接


ryandexdirect软件包中有2个用于授权的函数:


  • yadirAuth两步授权
  • yadirGetToken请求授权令牌

当使用yadirAuth函数时,也就是说,我建议在与ryandexdirect一起使用时使用它,授权过程将按照此处描述方案进行,这种情况下的唯一漏洞是从生成确认代码到将其输入到R控制台的时间。


我将解释为什么,这就是Google Analytics(分析)如何显示有关访问验证码生成页面的数据。



即 该代码位于“?”符号后,并且被认为是捕获Google Analytics(分析)计数器的GET参数,但是这种确认代码的生命周期在使用后立即终止,即 在您将其输入到控制台R中之后。此类代码的最长寿命为10分钟。


第二个函数yadirGetToken根据此处描述的其他方案执行授权。 并且当使用它时,不会生成确认代码,即 在授予软件包访问数据的权限后,您将进入令牌生成页面。 URL本身的令牌在“#”符号后返回,这不是get参数,而是锚点,或者作为URL的这一部分也称为哈希。 浏览器不会传输此数据;因此,它不会进一步传输到Google Analytics(分析)报告,即 报告中对该页面的访问显示如下:



在第二种情况下,没有风险,但是使用yadirGetToken函数的缺点是它不会将凭据保存到PC上的文件中,因此相应地无法在不同的R会话之间使用此数据,这不是很方便。 您将存储在其帮助下获得的令牌,并在脚本中将其用作文本字符串,此类令牌的生存期为1年,此后,该软件包将无法自动替换它,就像使用yadirGetAuth函数时那样。


rym程序包中有一个用于授权的函数rym_auth,它是yadirAuth函数的完整模拟,我已经详细介绍了其操作方案。


rfacebookstat-使用Facebook广告帐户的软件包


此处详细介绍了Facebook Marketing API中的身份验证过程。


为了通过授权,rfacebookstat程序包具有fbGetToken函数,它的作用与之前所述的ryandexdirect程序包中的fbGetToken函数相同,即 一切都通过一步认证来实现。 您的令牌不会通过Google Analytics(分析)报告被拦截,这没有危险,它显示了访问令牌生成页面在Google Analytics(分析)中的外观。



rvkstat-使用VK帐户的软件包


API帮助中介绍了Vkontakte身份验证过程。
在rvkstat中,可以使用以下两个函数之一进行授权:


  • vkAuth授权方案授权代码流程 ,即 两步授权。
  • vkGetToken根据隐式流方案的授权,一步授权,令牌绑定到设备。

vkAuth提供两步身份验证,本质上是此块开头描述的yadirAuth函数的类似物,但仅用于Vkontakte API中的授权,而不用于Yandex。


在这种情况下,使用Vkontakte API的特殊之处在于,在那里注册应用程序和访问API非常简单,您无需填写表格,而在表格中必须详细说明如何以及为什么使用API​​。 因此,由于在使用rvkstat时使用了应用程序,因此即使拦截确认代码也不起作用,因为 它与您的应用程序绑定在一起,为了与它一起拦截令牌,您需要知道应用程序的ID秘密 ,代码本身不允许您为您获取令牌。


vkGetToken函数允许您以最快的方式获取令牌,此外,接收到的令牌与请求令牌的设备绑定在一起,即 即使有人得到了它,他也只能从要求他的同一台PC上使用它。 同时,生成时URL中的令牌位于“#”符号之后,正如我之前所说,它不会进入Google Analytics(分析)报告。



rmytarget - MyTarget仪表板软件包


目前,MyTarget API中有3种授权方案,有关每种方案的详细信息,请参阅文档


myTarAuth函数用于在rmytarget中的MyTarget API中进行授权,默认情况下,它使用授权代码授予授权方案,该方案允许您使用MyTarget API进行操作而不必亲自访问它。 即 我已经注册了该应用程序,该应用程序已获得MyTarget API支持的批准,您可以授予该应用程序代表您使用该帐户的权限。


授权代码授权是一个两阶段授权方案,其含义类似于ryandexdirect软件包中yadirAuth函数所实现的方案。


其工作方式如下:


  • 您启动该功能,然后打开浏览器。
  • 在MyTarget服务页面上,您授予访问帐户的权限。
  • 您将被重定向到生成确认代码的软件包页面。 该代码的最长生存期为1小时,但是在您收到带有该令牌的令牌后立即终止。
  • 您将复制的确认代码输入R控制台,并获得用于使用API​​的令牌。

在这种情况下,确认代码是一个get参数,并记录在Google Analytics(分析)报告中。



但是,如果仔细看,除了代码(获取参数代码)外 ,URL还包含一个参数状态 。 这是一个字符串,也是由rmytarget程序包本身生成并在函数启动后立即发送到浏览器的令牌,此参数是唯一的,并向其附加了授权确认代码。 即使您同时截取了确认代码和状态令牌,您仍然不能使用此组合,因为 首先,没有地方可以输入状态令牌,正如我已经写过的,它是唯一的,即使有输入它的地方,也不能再次发送它。 因此,此授权方案是完全安全的。


但是,如果全部相同,此选项对您而言仍然可疑,那么rmytarget和myTarAuth函数允许您使用其余的两种授权方案:


  • 客户证书授予 ,用于通过API处理个人帐户数据
  • 代理商客户凭证授予 ,用于处理代理商/经理自己的客户的数据。

在这种情况下,您必须独立访问MyTarget API,目前只有法人实体可以获取它,并且它是手动发行的,要请求访问您需要使用反馈表,您可以在此处找到所有详细信息。


因此,如果您仍设法注册了使用MyTarget API的应用程序,则可以使用myTarAuth函数使用上面列出的两个方案之一很容易地进行身份验证,为此,将值FALSE传递给code_grant参数,并使用以下参数:


  • grant_type-您帐户的类型(在这种情况下为常规客户帐户)采用值“ client_credentials”或“ agency_client_credentials”。
  • agency_client_name-来自代理帐户的客户端登录,仅当grant_type =“ agency_client_credentials”时使用。
  • client_id-在确认对MyTarget API的访问时向您颁发ID。
  • client_secret-在您确认与客户端ID一起访问MyTarget API时发出。

客户凭证授予授权示例代码
 myTargetAuth <- myTarAuth(code_grant = FALSE, grant_type = "client_credentials", client_id = "XXXXXXXXXX", client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") 

授权方案代理商客户证书授予的示例代码
 myTargetAuth <- myTarAuth(code_grant = FALSE, grant_type = "agency_client_credentials", client_id = "XXXXXXXXXX", client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", agency_client_name = "xxxxxxxxx@agency_client") 

在使用这种方法的情况下,身份验证将通过而无需与rmytarget软件包站点进行任何交互。


结论


这是我们之旅结束的地方,因为今天在主要存储库(CRAN)中发布了10,000多个软件包,在GitHub上发布了80,000多个软件包,总而言之,我想对使用它们的安全性再说几句话。


首先,请注意在CRAN上是否需要一个软件包,因为这是R语言的官方存储库,因此在发布该软件包之前,要由该存储库的专家团队对软件包进行相当严格的审核。 除非完全符合CRAN政策,否则该软件包将不会在那里发布。 因此,如果该软件包位于CRAN上,则可以确保对其使用是安全的。


另外,我想指出,R语言的所有软件包的代码都是开放的,您始终可以在启动它之前查看其任何功能的代码。


也可以尝试查找有关此软件包应用程序的文章,R用户非常愿意共享信息,并且您可能会发现使用或多或少受欢迎的软件包的案例。 如果他们写的是一个软件包,则表示他们正在使用它,而且显然没有人遇到任何问题。


还要看看谁是包的作者,有两种方法可以做到这一点:


  1. 安装软件包后,运行utils::packageDescription("_")$Author命令
  2. 查看软件包源中的DESCRIPTION文件。

尝试在万维网上找到有关该作者的一些信息,如果一个人至少是公开的,则他不太可能冒着名誉冒险来获得访问您的广告帐户和广告材料的令牌。 通常,声誉比通过可疑方式获得的金钱要昂贵得多。


如果您是从GitHub安装软件包的,那么通常是从作者的存储库而不是从任何分支安装的,通常,在流行的存储库中有很多这样的分支:


Ryandexdirect分支


事实是,软件包的作者未更新分支,这意味着您将不会收到其最新版本。 此外,无论您是否决定信任此类更改,创建分支的GitHub用户都可以对其代码本身进行更改。


您可以在GitHub的页面上查看从哪个存储库创建其分支。



在任何情况下都不要将令牌转让给任何人,以与存储帐户密码相同的方式存储令牌,即使您需要显示代码示例,也要在不指定令牌的情况下进行操作。


请记住,在大多数情况下,R包的使用对您而言是完全安全的,我希望本文能使您相信这一点,并讨论最流行的广告平台的API中的授权过程如何工作。


祝你好运,要小心,但不要屈服于妄想症。

Source: https://habr.com/ru/post/zh-CN430888/


All Articles