私はC#プロジェクトに取り組んでおり、プロジェクトの一部を手伝ってくれる2人のプログラマーがいます。問題は、これらのプログラマーが最近参加していて、私の会社の資産を保護する必要があるため、これらのプログラマーを信用していないことです。
2人のプログラマーからコードの一部を非表示にして、コードが表示されないようにする必要があります。それでも、コードの一部で作業し、アプリケーション全体を実行してテストできるはずです。
そんなことはありますか?:)
私はC#プロジェクトに取り組んでおり、プロジェクトの一部を手伝ってくれる2人のプログラマーがいます。問題は、これらのプログラマーが最近参加していて、私の会社の資産を保護する必要があるため、これらのプログラマーを信用していないことです。
2人のプログラマーからコードの一部を非表示にして、コードが表示されないようにする必要があります。それでも、コードの一部で作業し、アプリケーション全体を実行してテストできるはずです。
そんなことはありますか?:)
いくつかのことを知ってください:
C# を使用すると、コンパイル対象を非常に簡単に確認できますが、これは実際にはすべてのプログラミング言語に当てはまります。コンパイルする必要がある場合は、dll に対してコンパイルするか、DLL または raw として実行できます。 C# の背後にあるロジックにアクセスできます。 それを回避する方法はありません。 コンピューターがプログラムを実行でき、すべてがあなたの PC に常駐している場合、人間はそれを見て、その方法を学ぶこともできます。
でも!プログラムに対してコンパイルする必要がないように、プログラムを設計できます。
他の従業員がプラグインを作成する必要があるコードを作成します。API のコア部分が実行時に動的にロードするインターフェイスに、完全に別のプロジェクトとしてコードを記述してもらいます。
これを行うためのツールについては、The Managed Extensibility Frameworkをご覧ください。
特定の秘密のコンポーネントを抽象化して、それがどのように機能するかの詳細を非表示にしてから、Web 呼び出しを介して呼び出すことができます。これは、保護したいコアの詳細が時間に左右されない状況でのみ機能します。これは、機能の背後にあるアイデアを保護するものでもありません。従業員は、それを使用できるようにする目的を理解する必要があり、それだけでゼロから再構築するのに十分です.
現在従業員を信頼していない場合は、それを開発する必要があります。 誰もがいつもしていることをすべて知ることはできません。 これは、プログラミングだけでなく、人生においても重要なスキルです。彼らを信頼できないと感じた場合は、信頼できる新しい従業員を雇うか、信頼を築く必要があります。
彼らの能力に対する信頼を築く方法の 1 つは、コード レビューです。まず、簡単に分岐できるバージョン管理システムを使用していることを確認してください。そうでない場合は、すぐにMercurial *に切り替えてください。通常は、複製されたブランチまたは名前付きブランチを介して、「統合」領域と個々の開発領域を用意します。コードをコミットする前に、従業員と集まって変更を確認します。あなたが彼らに満足しているなら、彼らにそれをコミットさせてください。これにより、各コミットに少し時間がかかりますが、変更をすばやく反復すると、レビューも迅速になります。
あなたが従業員を信頼していなければ、彼らもあなたを信頼していない可能性があります。相互不信は忠誠心を育みません。忠誠がなければ、保護はありません。彼らがあなたのレポジトリへのアクセス権を持っていて、あなたがそれらを信頼していない場合、少しの努力であなたが望むコードに到達できる可能性は十分にあります.
ほとんどの場合、ほとんどの人は正直です。彼らと協力してください。それらについて学びます。敵対的なエンティティのために働いていることが判明した場合、彼らはおそらく彼らが手に入れたいものをすでに手に入れており、とにかくあなたはめちゃくちゃです. 病的な嘘つきまたは無能であることが判明した場合は、すぐに交換してください。これらの問題はどちらも、コードを彼らの目から「保護」することによって解決されることはありません。
セキュリティの観点から、従業員の信頼を高めるもう 1 つの方法は、バックグラウンド チェックです。数百ドルと数日で、それらに関するあらゆる種類の情報を見つけることができます。彼らからコードを隠す準備ができており、あなたが雇用主である場合は、彼らが宇宙に秘密を盗む前に十分な注意を払うことをお勧めします.
壊したくないのですが、あなたのコードが特別なものではない可能性はほぼ 100% あります。目立たないようにして保護しようとするのは時間の無駄であり、既知の貧弱な保護方法です。
幸運を!
** なぜマーキュリアルなのか? 簡単に始められるオプションの 1 つだからです。好みに合う場合は、Git などの他のものを自由に使用してください。どちらを使用するかは、要点から外れており、この全体的な議論とは無関係です.*
あなたはそれをすることはできません、
コードを含む DLL のみを提供した場合でも、リフレクション ツールを使用してコードを抽出できますreflector
。
別のバックアップを保持し、ダミーのプレースホルダーをソース管理に送信します。
複雑な方法:VS2010と必要なすべてのファイルを使用してアプリケーションサーバーをセットアップし、すべてをロックして、ファイルに直接アクセスできず、VS2010とビルドされたアプリケーションのみを実行できるようにし、保護されたコードのDLLのみを提供します。
理論的には、必要なコードで作業することはできますが、DLLに直接アクセスすることはできません。また、.NETReflectorなどのツールをインストールまたは使用してファイルを分解することもできません。ただし、探す必要のある穴がいくつかあります。
正しい方法:信頼できるプログラマーを雇う。;)
私が確認できる唯一の方法は、コンパイルされ難読化されたアセンブリを参照できるようにすることです。プライベート メンバーのみを難読化できるため、コードを変更して、パブリック メソッドがまったく機能しないようにする必要がある場合があります。public メソッドに興味深いコードがある場合は、次のようにコードを再配置する必要があります。
public bool ProcessSomething()
{
return this.DoProcessSomething();
}
private bool DoProcessSomething()
{
// your code
}
VS に無料で付属している難読化ツールでさえ、コードを簡単に調べることができないようにします。より多くの保護が必要な場合は、もちろん、より優れた難読化ツールが必要です。
しかし、長期的には、それは非現実的であり、開発者を信頼していないという悪いシグナルを送ります。これから良いことは何もないはずです。あなたが上司 (またはコードの所有者) でない場合、それほど心配する必要はありません。結局のところ、それはあなたの所有物ではありません。上司に相談して、懸念を表明することができます。あなたが上司なら、そもそも信用できない人を雇うべきではありません。
コードを DLL に入れ、Dotfuscator を使用して内部の仕組みを難読化します。