2010-12-13 5 views
6

作業中のプロジェクトに対してDLLをセキュリティで保護するためのベストプラクティスは何ですか?開発に関心のある特定のDLLには、データアクセスレイヤ(DAL)とビジネスロジックレイヤ(BLL)機能があります。最終的にこれらのDLLを使用してビジネス固有の機能を実行できるアプリがいくつかあります。.NET DLLを保護する方法

これらのDLLを保護する最良の方法は、作成者のアプリケーションでのみ使用できるようにすることです。

DLLの不正使用とセキュリティの可能性のある逆コンパイルをブロックするセキュリティは両方とも望ましいです。

+2

デコンパイルを防ぐか、単に使用しないようにしてください。 – NotMe

+0

今のところ、私は使用を探していますが、本当に両方を探しています。それに応じて質問を更新しました。 – Matt

答えて

4

DLL内に公開されているすべてのクラスを「public」ではなく「internal」としてマークし、DLL内で"InternalsVisibleTo"属性を使用して、使用を許可されているDLL(およびexe)あなたの内部の種類。これはすべての参加者に強要される必要があるかもしれませんが、とにかくそれは良いことです。

最終的に、コードがハッカーのマシン上で実行されているときに、決定されたハッカーがコードにアクセスするのを防ぐ絶対的な方法はありません。マシンで実行できるすべてのコードは、十分に高度なツールと経験を使って、別のものに分解して再組み立てすることができます。

コードセキュリティにアプローチする最善の方法は、「誰かがライセンスまたは認可なしでこのコードを使用するためにはどれくらい難しいのですか?また、そのコードを達成するために費やす時間/金額? "何もしなければ、誰かが他のプロジェクトでDLLを使用するのはとても簡単です。いくつかの簡単なことをすれば、誰かがあなたのDLLを他の場所で使用するのが不便になることがあります。あなたが何ヶ月もの努力を払うと、誰かがあなたのコードを悪用することを非常に困難にするかもしれませんが、決して不可能にすることはできません。

私が想像しているように絶対安全な方法の1つは、クライアント(またはハッカー)のマシンでコードを実行しないことです。代わりにWebサービスを実行し、ハッカーがあなたのプロセスでデバッガを起動したり、コードを逆アセンブルしたりすることができないサーバーにコードを保存してください。コードセキュリティは、サーバーの物理的なセキュリティとサーバーのポートへのネットワークアクセスセキュリティによって定義されます。これらの攻撃ベクトルは、ハッカーのマシン上で実行されるコードに対して行うことができるものよりも多くの桁違いに回避できません。

一部のソフトウェア企業では、アプリケーションの一部をクライアントからクラウドに移動することは、スケーラビリティの向上や更新の容易化、コストの削減を目的としたものではなく、コードセキュリティと著作権侵害防止です。

+0

本当に。 .NETでは、exeファイルアセンブリも参照できるので、ほとんどまたはまったく違いはありません。 –

+0

レッドゲートのリフレクターのようなツールを使ってください。実行可能ファイルでさえも、ほとんどの場合、比較的容易に逆コンパイルされているようです。それでは、exeでこれを含めて実際に何か助けを提供していますか? – Matt

+0

ブライアンのポイントごとに「DLLをコードにプルする」提案を取り消します。残りの部分は絶対的なロックアウトがないため、結果をよりハッキングしないようにするためにどれくらい投資する意思があるかを判断する必要があります。 – dthorpe

1

オープンキーメカニズムを使用して認証を確立します。 DLL内の関数は、有効なキーとトークンを指定した場合にのみ機能します。

+0

いくつかのタイプの例を明確にしたり、リンクを提供したりできますか? – Matt

1

誰かがこれらのアセンブリを持つマシンにアクセスできる場合、それらを再利用する人よりも心配する必要があります。アセンブリを使用する代わりにデータベースに直接アクセスすることができます。

これがデスクトップアプリケーションなどで、データベースに直接アクセスしている場合は、アプリケーションを再検討したり、データベースに直接アクセスするのではなく、Webサービスなどでアクセスしたりする必要があります。

+0

シナリオは複製された環境に存在します。マシンはいつでもインターネットに接続できます。ウェブサービスはオプションではありません。 – Matt

+0

Sooooo ...あなたのポイントは何か分かりません。データベースに直接話すことは悪いですし、あなたはそれに直接話す理由もありません。 – Phill

+0

私はDALとBLLを別々のプロジェクトに持っていて、それをDLLにコンパイルしました。これらのライブラリは、私たちのロジックとDB操作を制御します。メインアプリケーションは、プレゼンテーションレイヤーだけを含むWPFアプリケーションです。同じDALおよびBLL操作の一部にも当てはまる他のサブアプリケーションがあります。これは、必要とされるさまざまなアプリから重複したコーディングを避けるために行われます。 DALの全目的はDBと話すことです。 – Matt

1

.NET DLLをクライアントに出荷すると、知的財産を保護することは実際には不可能です。クラウドにアプリケーションロジックをホストすることはできますが、それはあなたのシナリオに合わないかもしれません。

"ベスト"難読化さえも間違いありません。あなたはおそらくカジュアルなハッカーをやめてしまうかもしれませんが、dthorpeが言うように、誰かがあなたのアセンブリを逆コンパイルしたいと思うなら、彼らはそうなります。

関連する問題