从程序员员那里隐藏我的代码部分

时间:2012-05-17 16:40:28

标签: c# asp.net .net asp.net-mvc-3

我正在开发一个C#项目,并有两名程序员来帮助我完成部分项目。问题是我不相信这些程序员,因为他们最近加入并且需要保护我公司的财产。

我需要隐藏两个程序员的一些代码部分,以便他们看不到它们,他们仍然可以处理他们的部件并运行完整的应用程序来测试它。

有这样的事吗? :)

6 个答案:

答案 0 :(得分:13)

了解一些事情:

您无法隐藏代码用户编译。

C#让你非常容易看到你正在编译的内容,但对于所有编程语言来说都是如此:如果他们需要编译它们,编译一个dll,或者他们可以运行它,或者作为DLL或者作为原始C#,他们可以访问它背后的逻辑。 没有办法解决这个问题。如果计算机可以运行程序并且它全部驻留在您的PC上,那么人类可以查看它并学习如何操作。

无论其!您可以设计程序,使其不需要 进行编译。

使用接口。

制作其他员工必须编写插件的代码。让他们将他们的代码编写为一个完全独立的项目到一个接口,在运行时动态加载API的核心部分。

请查看The Managed Extensibility Framework以获取执行此操作的工具。

使用Web或远程服务。

可以抽象出特定保密的组件,因此可以隐藏然后通过Web调用调用其工作原理的详细信息。这仅适用于您要保护的核心详细信息不是时间敏感的情况。这也不能保护功能背后的想法:员工需要了解它能够使用它的目的,仅此一项就足以从头开始重建它。

通过代码审核建立信任。

如果您目前不信任您的员工,则需要开发它。 你将无法了解每个人所做的一切。这不仅仅是编程,而是生活中的关键技能。如果你觉得你不能相信他们,那么你要么雇用你可以信任的新员工,要么建立对他们的信任。

建立信任能力的一种方法是通过代码审查。首先,确保您使用的版本控制系统允许轻松分支。如果不是,请立即切换到Mercurial *。有一个“整合”区域和个别开发区域,通常通过克隆分支或命名分支。在他们提交代码之前,与员工聚在一起并查看更改。如果你对他们感到满意,那就让他们承诺吧。这将在每次提交时消耗一点时间,但如果您对更改进行快速迭代,那么评论也会很快。

通过Camaraderie建立信任。

如果您不信任您的员工,他们也可能不会信任您。相互不信任不会滋生忠诚度。没有忠诚,你就没有保护。如果他们可以访问您的存储库,并且您不信任它们,那么他们很有可能只需要一点点努力就可以获得您想要的代码。

大多数人大多数时候都很诚实。与他们合作。了解他们。如果有人为一个充满敌意的实体工作,那么他们可能已经获得了他们想要获得的东西而且你还是被搞砸了。如果一个人变成病态的骗子或无能者,立即更换它们。这些问题都不会通过“保护”您的代码来保存。

执行背景调查。

从安全角度来看,提高员工信任度的另一种方法是进行背景调查。几百美元,几天,你可以找到有关它们的各种信息。如果你准备隐藏他们的代码,并且你是雇主,那么你可以在他们窃取宇宙的秘密之前做尽职调查。

您的代码并不重要。

我讨厌打破它,但几乎有100%的机会你的代码并不特别。试图通过默默无闻来保护它是浪费时间和一种已知的,差的保护方法。

祝你好运!

**为何选择Mercurial?仅仅因为它是一个易于入手的选项。如果它适合您的喜好,请随意使用任何其他,如Git。您使用哪一个完全不是重点,而是与整体讨论无关。*

答案 1 :(得分:4)

你不能这样做,

即使你只给他们一个带代码的DLL,他们也可以用反射工具提取代码,例如: reflector

答案 2 :(得分:1)

保留单独的备份并将虚拟占位符提交给源代码管理。

答案 3 :(得分:1)

复杂的方法:使用VS2010和他们需要的所有文件设置一个应用程序服务器,将所有文件锁定,这样他们就无法直接访问任何文件,只能运行VS2010和构建的应用程序,并且只为受保护的代码提供DLL。

从理论上讲,他们可以处理他们需要的代码,但永远不会直接访问DLL,也无法安装或使用.NET Reflector等工具来反汇编文件。可能仍然是你需要寻找的一些漏洞。

正确的方法:聘请值得信赖的程序员。 ;)

答案 4 :(得分:1)

将您的代码放入DLL中并使用Dotfuscator来混淆内部工作。

答案 5 :(得分:1)

我能看到的唯一方法是给它们编译和混淆的程序集以供参考。因为您只能对私有成员进行模糊处理,所以您可能需要修改代码,以便公共方法在任何情况下都不会做太多事情。如果公共方法中有任何有趣的代码,您应该重新安排代码,如下所示:

public bool ProcessSomething()
{
    return this.DoProcessSomething();
}

private bool DoProcessSomething()
{
    // your code
}

即使是免费提供VS的混淆器也可以完成一些工作,使查看代码变得非常重要。如果您需要更多保护,当然需要更好的混淆器。

但从长远来看,它是不切实际的,并向开发人员发出不好的信号,告诉你不要相信他们。从中可以得到任何好处。如果你不是老板(或代码的所有者),我不会那么担心 - 毕竟这不是你的财产。您可以与老板交谈以表达您的疑虑。如果你是老板,你首先应该没有雇用你不信任的人。