你如何保护代码不被外泄漏?

时间:2008-10-06 11:03:16

标签: security project-management source-code-protection

除了开源您的项目和法规外,是否有办法防止或至少最大限度地减少代码泄露到公司/集团外部的损失?

我们显然无法阻止Internet访问(以防止通过电子邮件发送代码),因为程序员需要他们的参考。我们也无法阻止外围设备(USB,Firewire等)

当代码具有一些专有算法和内部开发的知识(与绘制GUI,连接到数据库的常规代码相反等)时,代码最重要,但某些应用程序(如会计软件和CRM)只是那:复杂的常规代码集合,原则上很容易开发,但需要花费数年时间才能从头开始编写。这就是泄露的代码将在竞争对手中派上用场的地方。

据我所知,防止泄​​漏几乎完全依赖于人体过程。你怎么看?您采取了哪些预防措施?并且之前有代码泄漏影响了你吗?

14 个答案:

答案 0 :(得分:37)

你无法阻止它离开。所以有两种解决方案 - 阻止人们想要伤害你,并采取法律预防措施。为了阻止人们讨厌你,他们正确对待他们(说更多可能是关于堆栈溢出的主题)。

我不是律师,但为了给自己提供法律保护,如果你相信它,为这些想法申请专利,在代码中加入版权声明,并确保你的程序员的合同明确规定了知识产权。 / p>

但在一天结束时,答案比竞争对手更快。

答案 1 :(得分:16)

除非您正在使用高度机密的内容,并且假设您无法阻止电子邮件和USB设备,我猜您并不存在,即使源代码泄漏也没有太大的损害。问题是,代码是什么,或者它的一部分是值得的,而不知道它是如何工作的以及围绕它的组织。

一般来说,“来源”的价值远远低于通常所宣传的价值,基本上没有人或组织的来源不值得为竞争对手占据存储空间。

此外,你错过了最有可能的攻击向量,而且无论如何它也是你无法阻止的。如果有人真的想要知道你是如何制造你的魔法那么他们会试图雇用你的开发人员,因为你无法阻止他们在他们的头骨内部获取信息,即使他们把所有他们的所有权转交给他们知识和领域专业知识随他们而去。基本上,员工保留和信任是唯一的方法。遗憾。

答案 2 :(得分:11)

我不知道会有多少实际的帮助,但是:

  1. 请勿关闭程序员。不要让他们处于想要将来源提供给竞争对手的位置。大多数地方低估了他们的开发人员。鉴于你在哪里(SO),我猜你不太可能。没有什么比看到销售人员参加高尔夫球比赛 - 由公司支付和支付 - 而我们不得不争取每月一次披萨一样。

  2. 真的,如果您的直接竞争对手今天获得了代码,它会怎么做?您的产品或垂直市场是否停滞不前,您不会在它们做出反应之前发布更新,更好的版本?没有创新空间吗?大多数公司高估了他们的“专有算法和内部开发的知识”。当然,它可能会缩短一些时间,但只占问题的10%左右。

  3. 如果您掌握了所有竞争产品的所有来源,那么它的实际使用量是多少?我猜它会让你回到几个月。没有前进。回来。

  4. 如果您拥有干净的系统,并且外部/内部知识很少,您需要多长时间才能将自己的产品置于可构建状态?深入了解代码并进行正在进行的操作需要多长时间?您需要浪费多少时间和金钱来尝试解决问题,而不是花时间和金钱来制作 产品更好用吗?

    我实际上已经拥有了所有来源 - 一百万行+代码 - 给竞争对手的产品。我们没有采取任何措施 - 除了一点点,然后删除它,这比我感到舒服 - 但我希望我们已经咀嚼了几个月的时间才能到达它们的位置然后。

    所以我们对它进行了修改,打了一个得到它的id10t(是的,是从另一家公司过来的开发人员/ PM),并考虑如何使我们的产品踢得那么多他们做了什么并不重要。更好地利用时间。工作得很好。我们有差异化因素,而不仅仅是以与他们相同的方式重新散列相同的功能。

    很抱歉,但是没有的方式可以阻止人们把东西拿出来,但仍然可以实际工作。你可以阻止他们想要来做这件事,或者让他们这样做是没有价值的。

    我们担心人们也会反编译我们的代码。当我们意识到WE有足够的麻烦来解决500K + C#,C ++和HTML代码与MAPI / Exchange交谈时所发生的事情时,我们不再担心了。如果有人可以反编译并解决它,那么我们想雇用他们......

    顺便说一句,为了清楚起见,并给出了我现在工作的人,我应该指出这是不是我现在的雇主。这是很久以前的事了。

答案 3 :(得分:8)

代码本身不泄漏。它需要人们接受它。显然,您可能会使用一些安全措施,例如流量分析和锁定存储库,因此只有经过授权的开发人员才能连接到它。

但到了最后,你最好的办法就是确保没有人能从你那里抢走。你的团队必须感到高兴,他们必须为你的工作感到自豪,因为他们必须忠于公司和彼此。如果你有这样的团队,这是一个简单的问题,向每个人解释必须保护代码不受外人的影响。它不会阻止专用的痣,但会防止意外。

P.S。是的,合同中的正确条款也不会受到损害,至少他们会确保开发人员知道在外面采用代码是道德错误。

答案 4 :(得分:5)

遵循这些指导原则,如果整个源代码存储库的内容遍布stackoverflow,则无关紧要:

http://geocities.com/mdetting/unmaintainable.html

哦,通过阻止对部分源代码的访问,扫描传出/传入的电子邮件等,向您的开发人员展示您不信任他们。这是一种让他们想留下来的绝对方式......没有什么比工作场所的一点点不信任更能提振士气。

另一个很酷的方式是告诉一半他们是“团队一员”并将另一半命名为不值得信任的“团队b”。然后将其反转并对“团队b”成员说同样的话。鼓励他们关注其他团队中的“坏人”并报告任何对你不忠的迹象。撒上一些“冲突诱惑者”(例如告诉“Joe”:'你知道Ed在你背后说的是什么吗?')等等。如果你把开发者设置成互相攻击并且在这里和那里创造一些[由你发明]的冲突......

(呃,不,我实际上并不推荐以上任何一种。只是开个玩笑。但我看到人们使用上面的所有策略。而且它没有用。)

答案 5 :(得分:4)

好的,我在这里会有点实用。

  • 对每个人都很好,并希望他们不会伤到你。

每个程序员从加入公司的那天起就知道他不会永远呆在那里。当他学到足够的东西以获得更好的机会时,他会改变。

编写代码的程序员认为,即使他们在向其他人出租时编写代码,他们也拥有对该代码的所有权。他们中的许多人通常都会试图接触源代码,即使他们不打算伤害任何人。

一旦他们离开公司,他们随身携带源代码并与同事失去联系,良心就会安顿下来并度过一段假期,过了一段时间,代码中的各个部分开始出现在各处。 / p>

这就是我所知道的事情,因为我目睹了它发生在我的公司。

那么一个人做什么?

  • 签署一份NDA,明确提到他们的程序员不会复制。
  • 在程序员之间分发您的产品,如果可能的话,将模块单独编码并由负责人整合,负责所有程序员都不会获得所有代码。
  • 在终止时,获得编码人员的书面承诺,即他们不拥有公司的任何知识产权,并且他们理解违规的处罚。
  • 如果有人侵犯了您的知识产权,请起诉该男子!没有例外。它将作为现有团队的榜样。

我听起来很极端吗?

答案 6 :(得分:2)

我记得Valve在开发HL-2时发生了这种情况。这里有趣的链接:http://www.shacknews.com/onearticle.x/28619

答案 7 :(得分:1)

我曾经在某个地方工作过,这里有一种真正的保密文化(历史上有很多次公司规模很小,“客户”曾经说过,滥用他们对我们的访问权限产物)。

虽然管理层处于最高层,但我看到的却略有不同。我认为我们的代码虽然并非完全无关紧要,但并不像您希望它在软件公司那样重要。

我们成功的原因是:

1)代码本质上是解决一堆问题的方法。如果您获得我们的代码,您将获得这些解决方案,但我们仍然有聪明的人解决了这些问题。他们比你更了解这些问题,并且能够比你更好地解决下一组问题。

2)因为他们真正理解问题(和解决方案),所以我们可以比竞争对手更快地做事,这可以转化为更便宜(或更有利可图)。

3)同样由于这些人和公司内部的态度,我们已经为客户提供了良好的支持,并提供了良好的支持。

4)因此,我们拥有良好的声誉和可参考的客户。

少数公司拥有真正值得保密的代码 - 专有算法等等 - 但对于我们绝大多数人来说,我们的产品很容易被聪明人复制。

我所说的是做基础知识 - 将其写入人们不能接受的合同中,保持安全等等 - 但不要过于担心。除非你处于一个非常特殊的市场,否则你的业务不会成功或失败。

答案 8 :(得分:0)

最好的一步是从具有强烈道德行为的球员那里重新开始。 可以像扫描所有通信一样采取各种其他步骤。有些地方会扫描电子邮件和所有信息。台式机/笔记本电脑没有硬盘或访问受限制,所有工作都在网络文件夹上,即使在家工作,也必须连接到互联网。离线工作得到同步。 USB和驱动器已断开连接。

其他政策仅在需要时提供访问权限。 这些只会在某种程度上减缓和阻碍,但是一个人非常坚定,然后他会找到解决这个问题的方法。 另一种方法是,如果代码真的非常重要,那么将copywrite的想法保护为legaly。

答案 9 :(得分:0)

说实话,这几乎是不可能的。如果我想建议即将出现在每日WTF上的公司会做什么:

  1. 断开“工作电脑”与互联网的联系,因为他们需要互联网访问以供大家购买wbbook。

  2. 使用环氧树脂填充开发人员USB插槽,并要求他们从集中式服务器加载/卸载所有内容,中央服务器会扫描通过它的所有数据,以获得类似语法的代码。

  3. 或者您可以信任您的员工并让他们签署保密协议......

答案 10 :(得分:0)

我个人从未在任何实际情况下进行测试,但我建议使用代码碎片:

基本上,您将项目拆分为多个库,为每个库定义接口和单元测试,然后分离SVN存储库,以便每个组都可以访问您宝贵源代码的有限部分。

如果您在国外外包,这也是一种很好的做法,无论如何都应该有所帮助。

答案 11 :(得分:0)

之前的答案似乎都集中在建立信任和雇用有道德的人。

另一种可能性是创建自己的特定于域的语言和工具。这将使任何泄露的代码更难使用。可能仍然有可能从中窃取有用的想法,但除非整个工具链泄露,否则不可能简单地编译竞争产品。

答案 12 :(得分:0)

相信你的开发者。人们倾向于辜负或低于预期。善待他们,并记住忠诚是双向的。毕竟,如果你不能切断拇指驱动器,你无法阻止任何人泄漏代码,无论你多么不信任它们。

话虽如此,发现自己是一名具有商业秘密专长的律师,可能是知识产权法其他部分的专长,并询问如何合法保护事物。你确实希望确保,如果竞争对手得到你的东西,竞争对手从中受益是不合法的。

答案 13 :(得分:0)

大多数答案都是基于道德和道德价值观。我想知道Google,Facebook等是否只是依靠员工的善意。让我休息一下,这完全是乌托邦式的。别傻了。要现实。

是的,可以防止代码泄露:

使用托管虚拟机的虚拟服务器,程序员只能通过远程桌面本地访问这些虚拟机(Intranet)。存储库在本地管理。访问存储库需要私钥。 禁用从虚拟机复制/粘贴到客户端。只允许从客户端复制/粘贴到虚拟。

像facebook这样的公司就是这样做的。

静止编码的唯一方法是拍照到实际的代码,完全不实用和可行,而且由于到处都有监控摄像头,你必须去洗手间拍摄这些照片。 / p>