17

除了开源您的项目和立法之外,是否有办法防止或至少将代码泄露到您的公司/集团之外的损失降到最低?

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

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

在我看来,防止泄漏几乎完全依赖于人的过程。你怎么看?您采取了哪些预防措施和措施?代码泄露之前有影响过你吗?

4

14 回答 14

41

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

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

但归根结底,答案比竞争对手跑得更快。

于 2008-10-06T11:09:09.740 回答
16

除非您正在使用高度机密的东西,并且鉴于您无法阻止电子邮件和 USB 设备,否则我猜您不会,即使源代码泄漏,也不会造成太大的损害。问题是,如果不了解代码的工作原理和周围的组织,代码或其中的部分价值是多少。

一般来说,“资源”的价值远低于通常吹捧的,基本上没有人员或组织的资源不值得竞争对手占用的存储空间。

此外,您错过了最有可能的攻击媒介,而且它也是您无论如何都无法阻止的攻击媒介。如果有人真的想知道你是如何创造魔法的,那么他们会试图雇佣你的开发人员,因为你无法阻止他们在他们的头骨中获取信息,即使他们交出所有的知识和领域专业知识与他们一起离开。基本上,员工保留和信任是唯一的方法。对不起。

于 2008-10-06T11:14:13.067 回答
12

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

  1. 不要让你的程序员失望。不要让他们处于想要将资源提供给竞争对手的位置。大多数地方都低估了他们的开发商。鉴于你在哪里(SO),我想你不太可能。没有什么比看到销售人员出去打高尔夫球更让我感动的了——公司付了钱,而且还付了钱——而我们不得不每个月去争取一次披萨。

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

  3. 如果您获得了所有竞争对手产品的所有来源,那么实际使用量会是多少?我猜这会让你倒退几个月。不前进。后退。

如果您有一个干净的系统,并且几乎没有外部/内部知识,那么您需要多长时间才能让自己的产品进入可构建状态?深入研究代码并确定发生了什么需要多长时间?你会浪费多少时间和金钱来解决问题,而不是花时间和金钱来让你的产品更好地工作?

实际上,我一直处于拥有竞争对手产品的所有源代码(超过 100 万行代码)的位置。我们没有对它做任何事情——除了一点点闲逛然后删除它,这让我感到不舒服——但我希望我们会花几个月的时间来到达他们所在的地方然后。

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

抱歉,但你无法阻止人们把东西拿出来,并且仍然能够实际工作。你可以阻止他们要这样做,或者让他们这样做对他们来说没有任何价值。

我们也担心人们反编译我们的代码。当我们意识到我们很难弄清楚与 MAPI/Exchange 对话的 500K+ 行 C#、C++ 和 HTML 代码中发生了什么时,我们就不再担心了。如果有人可以反编译并解决它,那么我们想雇用他们......

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

于 2008-10-06T15:01:00.037 回答
8

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

但最终你最好的选择是确保没有人想从你那里偷东西。你的团队必须快乐,他们必须为为你工作而自豪,他们必须忠于公司和彼此。如果你有这样的团队,这是一个简单的问题,就是向每个人解释代码必须免受外人的影响。它不会阻止专门的痣,但会防止事故发生。

PS 是的,合同中的适当条款也不会造成伤害,至少他们会确保开发人员意识到将代码带到外面在道德上是错误的。

于 2008-10-06T11:15:11.897 回答
6

遵循这些准则,如果整个源代码存储库的内容都发布在 stackoverflow 上,这无关紧要:

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

哦,通过阻止对部分源代码的访问、扫描传出/传入的电子邮件等,向你的开发人员表明你不信任他们。这是让他们想要留下来的可靠方法………​​…没有什么改善士气就像在工作场所有点不信任。

另一种很酷的方法是告诉一半他们是“团队 a”,而将另一半命名为不值得信任的“团队 b”。然后反过来,对“b组”成员说同样的话。鼓励他们密切关注其他团队中的“坏人”,并向您报告任何不忠的迹象。撒上一些“冲突诱导剂”(例如告诉“Joe”:'你知道 Ed 在你背后怎么说你吗? ')等等。如果你让开发人员互相对抗并创建一些 [发明者-你] 冲突在这里和那里......

(嗯,不,我实际上不推荐上述任何一种。开玩笑。但我看到人们使用了上述所有策略。但它没有奏效。)

于 2008-10-06T11:12:17.813 回答
6

好的,我将在这里有点实际。

  • 对每个人都好,并希望他们不会伤害你是行不通的。

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

编写代码的程序员相信他们拥有代码的所有权,即使他们是在出租给其他人时编写代码的。他们中的许多人通常会尝试获取源代码,即使他们不打算伤害任何人。

一旦他们离开公司,随身携带源代码,与同事失去联系,良心安定下来,去度假,一段时间后,代码中的点点滴滴开始到处出现。

这就是我知道会发生的事情,因为我亲眼目睹了它发生在我的公司身上。

那么一个人做什么呢?

  • 签署一份保密协议,特别提到他们的程序员不会复制。
  • 在程序员之间分发您的产品,如果可能的话,让模块单独编码并由负责人集成,该负责人的职责是所有程序员都不会获得所有代码。
  • 在终止时,得到编码员的书面承诺,即他们不拥有公司的任何知识产权,并且他们了解违规的处罚。
  • 如果有人侵犯了您的 IP,请起诉该人!没有例外。它将作为当前团队的示例。

我听起来很极端吗?

于 2009-01-06T16:45:22.267 回答
2

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

于 2008-10-06T11:49:36.710 回答
1

我曾在对这类事情有真正保密文化的地方工作过(从历史上看,曾经有很多次公司很小,“客户”滥用他们对我们产品的访问权)。

虽然高层管理人员非常保护,但我的看法略有不同。我认为我们的代码虽然并非完全无关紧要,但并不像您在软件公司中所期望的那样关键。

我们成功的原因是:

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

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

3)也因为这些人和公司内部的态度,我们向客户提供了良好的服务并提供了良好的支持。

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

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

我要说的是做基础——把它写进人们不能接受的合同,保证它的安全等等——但不要沉迷于它。除非您处于一个非常特定的市场,否则它不太可能真正使您的业务成功或失败。

于 2010-03-23T11:15:15.573 回答
1

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

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

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

像脸书这样的公司就是这样做的。

仍然编码的唯一方法是对实际编码进行拍照,这完全不实用也不可行,而且由于到处都有监控摄像头,所以你必须去洗手间才能​​拍到那些照片。

于 2014-12-06T23:28:19.943 回答
0

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

其他政策是仅根据需要提供访问权限。这些只会在一定程度上减慢和阻碍,但如果一个人非常坚定,他就会想办法解决这个问题。另一种方法是,如果代码真的很重要,那么让想法受到版权保护。

于 2008-10-06T11:10:44.633 回答
0

老实说,这几乎是不可能的。如果我想建议一家很快会出现在 Daily WTF 上的公司会做什么:

  1. 断开“工作计算机”与互联网的连接,因为他们需要互联网访问以供参考,所以请给每个人买一本 wbbook。

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

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

于 2008-10-06T11:18:09.033 回答
0

我个人从未对任何真实案例进行过测试,但我建议使用代码碎片:

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

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

于 2008-10-06T11:20:52.087 回答
0

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

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

于 2008-10-06T12:05:06.007 回答
0

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

话虽如此,请为自己找一位具有商业秘密专业知识的律师,可能是知识产权法其他方面的专业知识,并询问如何合法地保护东西。你确实想确保,如果竞争对手得到你的东西,那么竞争对手从中受益是不合法的。

于 2009-01-06T16:44:52.033 回答