我正在与一位正在开发投票应用程序和框架的同事聊天。他问的是技术问题,我建议他开源该应用程序,以便从对此问题感兴趣并愿意为此付出努力的开发人员那里获得更多高质量的意见。

他有不同的观点,我认为仍然有效,所以我想在这里提出这个问题进行讨论。他说他相信像投票框架这样的东西应该 不是 开源是因为随着人们揭露可以作弊的漏洞,这会降低其安全性和有效性。不能说我完全不同意。我认为这在某种程度上是有道理的,但我始终相信,一群人提出的解决方案几乎总是比一个人询问少数同事提出的解决方案更好,无论这个人有多聪明。我再次愿意接受,也许某些类型的应用程序是不同的。

有人提出对他有利的论据吗?我真的很想向他展示你的回应。

有帮助吗?

解决方案

您在说网站上谈论民意调查吗? “您最喜欢的语言C#,Java或Cobol是哪种?”类型民意调查?如果是这样,那是一个有趣的事情。

通常,我会同意西蒙的回答,即如果打开消息来源会揭示漏洞,那么一开始就永远不会安全。

然而, ,对于这种应用程序。 不是 安全起初,不能轻易地制作。问题是,我敢打赌,您需要人们能够进入网站并在民意调查中投票,不需要注册。和你 有一个不兼容的要求,即人们只能投票一次。

所以无论您做什么。.都有漏洞。检查IP地址?想要作弊的访客知道使用代理。饼干?想要作弊的访客知道要清除他的饼干。打开来源使看如何作弊是微不足道的。

但是话虽如此,这是微不足道的。不需要很长时间才能尝试替代方案,看看哪个允许多票。只是不可能使这种匿名民意调查安全,因此您也可以开源,至少让眼球发现虫子!

其他提示

实际上, 开源有助于您更加安全.

我个人认为,当一个程序以关闭的源头开始,然后首先制作开源时,它通常对任何用户(通过暴露脆弱性)而开始,并且随着时间的流逝(例如几年),它有可能变得很大比封闭的程序更安全。如果该程序以开源软件的形式开始,则公众审查更有可能在准备好大量用户使用之前提高其安全性,但是此声明有几个警告(这不是IronClad规则)。仅仅制作程序开源不会突然使程序安全,仅仅因为程序是开源的,并不能保证安全性:

  • 首先,人们必须实际检查代码。这是辩论的关键点之一 - 人们会在开源项目中真正审查代码吗?各种因素可以减少审查的量:成为利基市场或很少使用的产品(很少有潜在的审阅者),很少有开发人员,并且使用很少使用的计算机语言。显然,一个具有单个开发人员且没有任何其他贡献者的程序没有这种评论。另一方面,有一个主要作者和许多其他人偶尔检查代码并贡献的计划表明,还有其他人正在审查该代码(至少是为了创造贡献)。总的来说,如果有更多的审稿人,通常有人会发现缺陷的可能性更高 - 这是“许多眼球”理论的基础。请注意,例如,OpenBSD项目不断检查安全缺陷的程序,因此其最内向部分的组件肯定经过了冗长的审查。由于OSS/FS讨论通常是公开进行的,因此潜在用户可以自己判断的审查水平。
     
    一个特别减少审查可能性的因素实际上不是开源的。一些供应商喜欢将其“披露的来源”(也称为“可用来源”)构成开源,但是由于计划所有者拥有广泛的专有权,因此其他人将不太动力为所有者提供“免费”的动力。编码。即使具有异常不对称权利(例如MPL)的开源许可也存在此问题。毕竟,如果其他人拥有自己没有的结果的权利,人们就不太可能自愿参加(正如布鲁斯·佩伦斯(Bruce Perens)所说:“谁想成为别人的无薪雇员?”)。特别是,由于最激励措施的审稿人往往是试图修改程序的人,因此这种拒绝参与的人减少了“眼球”的数量。埃里亚斯·利维(Elias Levy)在他的有关开源安全性的文章中犯了这个错误;当时,他的软件示例(例如,TIS的手套)并非开源。

  • 其次,至少有些人开发和审查代码必须知道如何编写安全程序。希望本书的存在能有所帮助。显然,如果没有眼球知道要寻找什么,那么“有很多眼球”都没关系。请注意,只要那些知道如何检查代码更改的人,每个人都不必知道如何编写安全程序。

  • 第三,一旦发现,这些问题就需要快速解决,并分配了它们的修复。开源系统倾向于快速解决问题,但是分布并不总是平滑。例如,OpenBSD开发人员在查看安全缺陷的代码方面做得非常出色 - 但他们并不总是向原始开发人员报告确定的问题。因此,很有可能在一个系统中有一个固定的版本,但要使缺陷保留在另一个系统中。我相信这个问题随着时间的流逝而减少,因为没有人“下游”喜欢反复解决同样的问题。当然,确保在最终用户系统上实际安装安全补丁是开源和封闭源软件的问题。

开源的另一个优点是,如果发现问题,则可以立即解决。这确实没有封闭源中的任何对应物。

简而言之,对开源软件的安全性的影响仍然是安全界的主要辩论,尽管许多著名专家认为它具有更安全的潜力。

看看Linux ...

开源“将降低其安全性和有效性,因为人们揭示漏洞是完全无效的。安全的产品不应有漏洞,因此当将其制成开源时,就不应该露出漏洞。

如果您的产品具有漏洞,可以通过将其制作开源而不是安全性来揭示,那么这只是隐藏了您的编译器背后的缺乏安全性。您可能会暂时摆脱它,但最终有人会反向设计您的代码并找到其中一个漏洞(您甚至可能不知道)

我会相信开源安全产品远远超过我信任封闭的源产品。

安全专家Bruce Schneier很好地总结了这一点:

如果我寄了一封信,将其锁在保险箱中,将安全隐藏在纽约某个地方,然后告诉您阅读这封信,这不是安全性。那是晦涩的。另一方面,如果我拿了一封信并将其锁定在保险箱中,然后将安全的规格与安全和一百个相同保险箱的设计规格一起使用,以便您和世界上最好的安全件可以研究锁定机制 - 您仍然无法打开保险箱并阅读信件 - 这是安全的。

Bruce Schneier-应用密码学

通读一下 开源堆栈溢出会破坏我们的商业模式吗? - 虽然 Stack Overflow 与您的民意调查框架不同,但它应该可以让您更深入地了解许多其他人的观点。

我突然想到一些我自己也不知道答案的想法......

  1. 仅仅因为有人向项目提交了代码,它可能不够好/被接受/使用。开源并不会自动使代码变得更好。
  2. 同样,我不知道帮助编写代码的开发人员的平均使用率是多少。可能没有大量的开发人员为源代码做出贡献?(尽管您只需要 1 或 2 个即可产生实质性差异)。
  3. 我想也没有什么可以阻止您开源该框架,但是您可以为您的业务运行一个内置了其他功能/安全性的定制版本。
  4. 您的企业可以保持匿名/不宣传其支持该框架吗?框架安装/运行的位置 - 伪装成一个特定的框架?(考虑一下 WordPress 以及安全建议之一是如何隐藏“Wordpress 版本 2.3”的元标记)。
  5. 您还需要与您的老板/法律部门交谈,因为您的雇佣合同可能会说明您在工作中创建的任何内容的知识产权均归您的雇主所有,并且开源一些源自公司的代码可能会影响您的工作。让你陷入热水之中。
许可以下: CC-BY-SA归因
scroll top