我正要安装一个我没听说过的人的Ruby宝石。但有些东西让我想到“这个人是谁?”。 Ruby gem是否存在访问您计算机上的私有数据并将其传输到其他地方的风险 - 因为gem系统可以访问Internet?或者是否有针对此的保护措施?
答案 0 :(得分:16)
当然有。您正在计算机上安装软件,该软件以调用它的脚本/用户的权限运行。在纯Ruby中发现恶意代码可能比在二进制包中更容易。但是,如果您认为源检查是发现恶意代码的有保证的方法,请查看under-handed C contest。
也就是说,如果你想编写恶意软件,那么有效的交付系统比Ruby宝石更有效。如果存在的实际恶意宝石的数量为0,那么我不会感到惊讶,因此这个恶意宝石的概率同样是0 ......
答案 1 :(得分:3)
每当您将未知逻辑导入应用程序时,都存在恶意代码的风险。风险仅与该应用程序可访问的数据一样深。就像Java applet沙盒化一样。
获取您信任的签名包,或查看来源。
答案 2 :(得分:2)
如果我想了解恶意宝石出现的可能性,我会看看是否已经用任何语言检测到恶意软件包(例如python egs,或Perl的CPAN),恶意的可能性有多大在没有人注意的情况下制作软件包,以及ruby是否比其他语言风险更大。
我可能会看到我是否可以创建一个信任网 - 即使我不认识宝石作者,我是否认识某人?
我可能还会看看Debian这样的包管理器是否检查包是否是恶意的,如果是的话,是否检查了你想要使用的gem。
答案 3 :(得分:1)
我不同意上面的海报,即存在恶意宝石的可能性为0.总是存在使用恶意宝石的危险。是偏执狂,但仍然可以完成任务。
答案 4 :(得分:1)
我相信有两组宝石。
首先是“众所周知的宝石”,它们与生物量相关,并且有更多(有时候我的技能模糊不清)代码/逻辑。但是那些宝石会被许多其他开发者评论。
然后有“小宝石”(意思是没有广泛使用和传播)。这个宝石用于低版本,β状态等。
我的经验法则是:我相信第一组,并从第二组宝石中读取所有代码。
这不完全正确,因为我没有时间阅读系统中每个gem的代码,但每当我需要理解一个方法调用,或者某个函数是如何处理的时候,我会尝试去源代码。实现,驱动我,几乎总是阅读至少2-3个源文件。
如果我要为某个功能安装某个功能,我会用它来搜索github并查看实现,分支和开发人员的数量,活动(提交的数量和频率)等等。
那就是说,我用来信任宝石,因为我从来没有发现任何故意伤害,但是糟糕的实施和一些安全漏洞。
答案 5 :(得分:0)
已经有过加密签名宝石的建议,所以你至少知道作者的代码没有被篡改过,但是没有采用这种方法