代码之家  ›  专栏  ›  技术社区  ›  rami

如何保护代码不外泄?[复制品]

  •  15
  • rami  · 技术社区  · 18 年前

    除了公开采购您的项目和法规之外,还有什么方法可以防止或至少最小化代码在您的公司/集团之外泄漏的损害?

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

    当代码拥有一些专有的算法和内部开发的知识(而不是常规的常规代码来绘制gui、连接到数据库等)时,它最重要,但是一些应用程序(如会计软件和CRM)就是这样的:常规代码的复杂集合,原则上很容易开发,但要花费数年的时间才能完成工作。从头开始。这就是泄露代码对竞争对手有用的地方。

    据我所见,防止泄漏几乎完全依赖于人类的过程。你怎么认为?你在采取什么预防措施?代码泄漏以前影响过你吗?

    14 回复  |  直到 11 年前
        1
  •  37
  •   Nick Fortescue    18 年前

    你不能阻止它出来。所以有两个解决办法——阻止人们伤害你,并采取法律预防措施。为了阻止人们憎恨,你应该正确对待他们(说得更多可能是堆溢出的话题)。

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

    但到了最后,答案是跑得比比赛快。

        2
  •  16
  •   Torbjörn Gyllebring    18 年前

    除非你正在处理一些高度机密的东西,而且考虑到你不能阻止电子邮件和USB设备,我猜你不会有真正的损害,即使源代码泄漏。问题是,如果不知道代码是如何工作的,也不知道它周围的组织,那么代码或其部分的价值是什么。

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

    此外,你还缺少最有可能的攻击向量,这也是一个无论发生什么都无法阻止的向量。如果有人真的想知道你是如何创造你的魔法的,那么他们会试图把你的开发人员雇佣出去,因为你不能阻止他们在他们的头骨里获取信息,即使他们把所有的知识和领域专长都交给他们。基本上,员工保留和信任是唯一的方法。对不起的。

        3
  •  11
  •   halfer Jatin Pandey    12 年前

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

    1. 别把你的程序员关了。不要让他们处于他们 希望 把信息源给竞争对手。大多数地方低估了开发商的价值。考虑到你在哪里,我想你不太可能去。没有什么比看销售人员出去打高尔夫更让我感动的了——公司付了钱,还付了钱——而我们每个月都得争取一次比萨饼。

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

    3. 如果你得到了所有竞争对手产品的全部来源,那它实际的使用量是多少?我想这会让你推迟几个月。不向前。回来。

    如果你有一个干净的系统,很少有外部/内部知识,你需要多长时间才能使你自己的产品进入可构建状态?深入了解代码并进行训练需要多长时间? 你会浪费多少时间和金钱去解决问题,而不是花多少时间和金钱去解决问题 你的 产品工作得更好?

    事实上,我已经拥有了竞争对手产品的所有源代码——100万行+代码。我们什么都没做-除了一点小改动然后删除它,这比我所能接受的还要多-但是我希望我们已经花了几个月的时间来达到他们当时的状态。

    所以我们用核武器,打了那个得到它的ID10T(是的,一个来自另一家公司的开发人员/PM),然后考虑如何制造 我们的 产品踢了那么多屁股,他们做了什么都不重要。更好地利用时间。工作也很好。我们有了区分符,不仅仅是以相同的方式重新散列相同的特性。

    对不起,但有 不 这样你就可以阻止人们把东西拿出来,而且还能真正工作。你可以阻止他们 想要 去做,或者去做,这样他们就没有价值了。

    我们也担心人们会对我们的代码进行反编译。当我们意识到我们有足够的麻烦来解决在C++和C++中的500 K+行和MAPI/Exchange的对话时,我们停止了担心。如果有人能将其分解并解决,那么我们就想雇用他们……

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

        4
  •  8
  •   Ilya Kochetov    18 年前

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

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

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

        5
  •  5
  •   KristoferA    18 年前

    遵循这些指导原则,如果整个源代码存储库的内容都在stackoverflow上发布,那么这并不重要:

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

    哦,通过阻止对部分源代码的访问、扫描发送/接收的电子邮件等方式向您的开发人员表明您不信任他们。这是一种让他们愿意留下来的可靠方法……没有什么比工作场所的不信任更能提高士气了。

    另一个很酷的方法是告诉一半的人他们是“A队”,另一半的人是不可信的“B队”。然后反过来对“B组”成员说同样的话。鼓励他们关注其他团队中的“坏人”,并向你报告任何不道德的迹象。撒上一些“冲突诱因”(例如,告诉“Joe”:' 你知道艾德在背后说了什么吗? “)等等。如果你把开发人员对立起来,在这里和那里制造一些[你发明的]冲突,会产生奇迹……

    (嗯,不,我实际上不推荐上述任何一种。开玩笑吧。但是我看到人们使用上面所有的策略。但它不起作用。)

        6
  •  4
  •   Cyril Gupta    17 年前

    好吧,我在这里会有点实际。

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

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

    编写代码的程序员相信他们拥有代码的所有权,即使他们是在出租给别人的时候写的。即使他们不打算伤害任何人,他们中的很多人通常都会试图掌握源代码。

    一旦他们离开公司,携带着源代码,失去了与同事的联系,良心就会安定下来,开始休假,不久代码中的零碎就会到处出现。

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

    那我们该怎么办?

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

    我听起来很极端吗?

        7
  •  2
  •   endian    18 年前

    我记得他们研发HL-2的时候发生在瓣膜上。有趣的链接: http://www.shacknews.com/onearticle.x/28619

        8
  •  1
  •   Jon Hopkins    16 年前

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

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

    我们成功的原因是:

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

    2)因为他们真正了解问题(和解决方案),我们可以比竞争对手更快地完成工作,这意味着成本更低(或利润更高)。

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

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

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

    我要说的是做一些基本的事情——把它写进人们的合同里,让他们不能接受它,保证它的安全等等——但是不要为它着迷。除非你身处一个非常特殊的市场,否则你的企业不可能真正成功或失败。

        9
  •  0
  •   Dheer    18 年前

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

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

        10
  •  0
  •   Omar Kooheji    18 年前

    老实说,这几乎是不可能的。如果我想建议一家不久就会出现在每日世界贸易论坛上的公司会做什么:

    1. 断开“工作电脑”与互联网的连接,英国电信因为他们需要互联网接入作为参考,给每个人买一本WBbook。

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

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

        11
  •  0
  •   Pokot0    18 年前

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

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

    这也是一个很好的实践,无论你是什么,应该帮助如果你是外包国外。

        12
  •  0
  •   HS.    18 年前

    以前的答案似乎都集中在建立信任和雇佣道德人员上。

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

        13
  •  0
  •   David Thornley    17 年前

    相信你的开发者。人们往往生活在期望之上或之下。好好对待他们,记住忠诚是双向的。毕竟,如果你不能切断拇指驱动器,你就不能阻止任何人泄漏代码,不管你多么不信任他们。

    也就是说,找一个拥有商业秘密专长的律师,可能是知识产权法其他部分的专长,并询问如何在法律上保护这些东西。你要确保,如果竞争对手得到了你的东西,那么竞争对手从中获益是不合法的。

        14
  •  0
  •   John Smith    11 年前

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

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

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

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

    唯一的方法就是照实际的代码,这是完全不实际和可行的,因为到处都有监控摄像头,你将不得不去浴室拍这些照片。