微软的 .NET 正在偷窥用户隐私?
点击上方“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 开发工具的遥测问题不知将如何收场?
至少,作为普通开发者的我们,能做的有两件事:
如果你不希望微软收集使用数据,可以在环境变量里设置DOTNET_CLI_TELEMETRY_OPTOUT为 true(或1),禁用这项功能;
在 .NET 的 GitHub(https://github.com/dotnet/cli/issues/3093)上建议微软将该选项改为默认禁用。
整理自:https://github.com/dotnet/cli/issues/3093#issuecomment-392663561
译者:弯月
责编:屠敏
征稿啦!
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。
————— 推荐阅读 —————
点击图片即可阅读