查看原文
其他

微软的 .NET 正在偷窥用户隐私?

弯月译 CSDN 2018-07-25

点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

最近,随着《通用数据保护条例》(General Data Protection Regulation,简称 GDPR)的实施,在 GitHub 上有关 .NET 的一个 ticket 再次吸引了大家的关注(https://github.com/dotnet/cli/issues/3093)。该 ticket 的缘由是,有个用户发现了 .NET Core 中包含了一个功能,会将一些用户信息上传到微软的服务器,而这些用户信息中可能包含用户隐私。

对此,微软的 .NET 团队做出了回应。其表示,该功能叫做 Telemetry(遥测),的确会收集用户对 .NET Core Tools 的使用情况,而收集信息的目的是为了日后改进工具的功能。该功能收集的信息包括:

  • 收集命令行上使用的命令;

  • 收集命令的退出返回值;

  • 对于测试项目,收集使用的测试运行程序;

  • 收集调用的时间;

  • 收集使用的框架;

  • 运行时节点中是否存在运行时 ID;

  • 使用的 CLI 工具的版本;

  • 操作系统版本。

微软保证这个功能不会收集任何个人信息(如用户名和邮件地址等),也不会扫描源代码,更不会从源代码中提取任何敏感信息。此外,该功能仅限于 .NET Core Tools 工具,不会被编译到生成的应用程序中。微软还给出了关闭该功能的方法:只需设置环境变量 DOTNET_CLI_TELEMETRY_OPTOUT 为true,.NET Core Tools就不会再收集这些信息。(https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-net-core-rc2/#telemetry

看上去微软做得似乎没有问题:文档中明确列出了收集的信息种类和使用目的,还给出了停止收集的方法。那么用户们争论的究竟是什么呢?

症结就出在这个“关闭该功能的方法”上。当时微软给出的官方方法是:

“要想停止Telemetry功能,可以将环境变量DOTNET_CLI_TELEMETRY_OPTOUT 设置为 true,信息收集进程就不会再运行。”

从上面的描述中我们可以推测出,Telemetry 功能是默认运行的,也就是说,在安装 .NET Core 的时候会自动开启该功能。而且一些用户的评论也表示,在安装 .NET Core 的过程中没有任何提示,仅在安装结束之后有一行很不明显的文字。笔者也亲自验证了这一点:以下这个是 .NET 框架安装结束后的画面,一般人都会直接点 Close 按钮关闭对话框了,很难注意到中间一行关于数据收集的声明。

此外就是在第一次运行命令行工具时,会给出一些不起眼的提示:

注意这个提示仅在第一次运行时会出现,再次运行 CLI 命令就不会显示提示了。

此外,请注意这个停止收集信息的方法:需要手动设置某个环境变量。并不是在某个画面给出明确的停止收集信息的选项。有理由相信,绝大部分的 .NET 开发者在安装或第一次运行命令时根本不会注意到那两次提示,之后也没有任何途径能够容易地知道 .NET 在收集信息,或者了解如何关闭该行为。

可见微软对于这个 Telemetry 功能的态度:默认启用,通过不起眼的小字来规避法律风险。

有人说,毕竟是个命令行工具,貌似除了这种提示方式,也没有更好的办法了吧?其实不然。GitHub 上有用户分享了别人是怎么做的。同样是命令行工具的 Yeoman,同样是要收集使用信息,Yeoman 会明确地提出这一点,并要求用户输入 Y/n 才能继续进行:

如果仅仅是关于是否应该默认启用该选项,可能这个话题的热度还不会这么高。其实 GitHub 上的这个 issue 早在 2016 年 5 月 11 日就提出了,针对的是 .NET Core SDK Preview 1 版本。在这两年间,除了 .NET 团队在刚开始时给出了一些答复,之后一直处于无人问津的状态。但为什么两年后的今天这个 issue 又被提出来了?当然 GDPR 是一个契机,另一个原因是新版本的 .NET Core CLI 工具更新了它的文档,开始收集更多的信息了(我在新增数据前加上了【新】标记):

  • 调用的时间;

  • 调用的命令;

  • 命令的返回值;

  • 测试项目所用的测试运行工具;

  • .NET Core SDK 版本;

  • 运行时节点是否包含运行时 ID;

  • 【新】IP 地址的前三个数字,以确定地理位置;

  • 【新】dotnet 命令的参数和选项(仅已知参数);

  • 【新】 SDK 是否运行于容器中;

  • 【新】目标框架;

  • 【新】hash 过的 MAC 地址,经过 SHA256 加密后的匿名且唯一的机器ID。该信息不会被公布。

  • 【新】hash 过的当前路径。

而 GDPR 关于个人信息的定义如下:

GDPR 所涉及的“个人信息”定义为与一个已识别的或可识别的自然人相关的任何数据。可识别的自然人是可以通过标识符(例如该自然人的姓名、身份证号码、位置数据、在线标识符或一个或更多特定于身体、生理、基因、心里、经济、文化或者社会身份)直接或间接识别的人。

可见,.NET 这次收集的“匿名且唯一”的“ Hash 过的 MAC 地址”,可以认为属于在线标识符的一种,因此这一收集信息的行为应当受到 GDPR 的规制。

有用户担心,微软在每次发布新版本 SDK 时都会增加收集信息的范围,这是在一步步试探用户的底线,总有一天新的用户会认为这种“良性”的收集信息是常态。 大部分人都认为,微软应该在安装 .NET 时明确提示这一选项,并让该选项默认禁用,而不是像现在这样默认启用。

然而微软 .NET 团队尚未对此做出进一步答复。联想到上次 Windows 10 的遥测功能引发的个人隐私风波,这次 .NET 开发工具的遥测问题不知将如何收场?

至少,作为普通开发者的我们,能做的有两件事:

  1. 如果你不希望微软收集使用数据,可以在环境变量里设置DOTNET_CLI_TELEMETRY_OPTOUT为 true(或1),禁用这项功能;

  2. 在 .NET 的 GitHub(https://github.com/dotnet/cli/issues/3093)上建议微软将该选项改为默认禁用。

整理自:https://github.com/dotnet/cli/issues/3093#issuecomment-392663561

译者:弯月

责编:屠敏

  征稿啦!

CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。

————— 推荐阅读 —————

点击图片即可阅读

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存