2012-01-03 7 views
4

人々がReflector.netを使用して自分の.exe C#アプリケーションを逆コンパイルできないようにするにはどうしてですか?私はそこにたくさんの投稿があることを知っていますが、私が「隠す」唯一のものは私のデータベース接続文字列です。c#設定でデータベース接続文字列を保護すると、逆コンパイルを防止できますか?

私は現在、データベース接続の情報を保持するために私のC#で "設定"を使用しています。 私のプロジェクトの設定でこれらの文字列を使用すると人々がそれを見られないようにするかどうかを知りたがっていますか?

ビジュアルスタジオ2008でDotFuscatorを使用していますが、私のプログラムを逆コンパイルしないようにしていないと聞いていました。

私はWebサービスを使用することができますが、私のサーバーはLinux上にあるので、Linux上にWebサービスを保管することはできません。

+0

ここをクリックしてください:http://stackoverflow.com/questions/2107036/is-it-possible-to-prevent-decompilation-of-net-msil-dll –

+0

とここに:http://stackoverflow.com/questions/2478230/how-can-i-protect-my-net-assemblies-from-decompilation –

+0

投稿ごとに1つの質問にしてください。 –

答えて

4

いいえプログラムコードまたは設定ファイルで接続文字列を暗号化しても、暗号化を解除する必要があります。プログラムには暗号化キーが必要な場所に格納されている必要があります。それを見つけることそれを見つける、どのように創造的なあなたはそれを隠している。なぜあなたは接続文字列を隠す必要がありますか?あなたのプログラムを持っている人がWebサービスを直接呼び出して意図しないアクションを引き起こすことがあるのであれば、Webサービスがどのように構造化されているか、クライアントができること、許可の仕組みを調べ、そこでセキュリティを改善する必要があります代わりに。

+0

私のプログラムはmysqlデータベースに接続しようとしています。もし人々がデータベース接続の情報を見ることができれば、それらのデータベースに接続してすべてのデータを削除できますか?私はC#の代わりにJavaでそれを行う必要がありますか? Javaは逆コンパイルできないと聞きましたか? – Kinouk

+2

@Kinoukあなたはここで間違った木を上に*完全に*吠えている。 *すべてのコードは、ある意味で「デコンパイル」することができます。また、エンドユーザから接続の詳細を隠すことはできません。代わりに、自分の詳細を伝える必要があります。 –

+0

私は基本的には.phpページに登録ページを作成する必要があります。ユーザーがC#アプリケーションを使用するときは、彼の情報を入力する必要があります(サーバーアプリケーションで検証する) – Kinouk

5

プログラムに接続文字列が含まれている場合、プログラムのユーザーはそのプログラムをバックアウトすることができます。たとえそれを暗号化しても、プログラムがDBサーバーに接続すると、そのプログラムを盗聴できます。

ユーザーにDBログイン資格情報を知らせたくない場合は、ユーザーにDBログイン資格情報を与えないでください。それが唯一の方法です。

各ユーザーに独自の資格情報を与え、DBサーバーの権限システムを使用して、ユーザーが実行できる操作とできない操作を制御することで、これを行うことができます。

+0

しかし、接続情報が含まれていない場合、クライアントはサーバーとどのように通信できますか?私は紛失してしまいました。ごめんなさい – Kinouk

+1

クライアント*は接続情報なしでサーバに接続できません。だからこそ、私の最後の段落が言ったことをするべきです:各ユーザーに自分のログインを与える。実際には、データベース自体にログインさせるべきではありません。たとえば、サーバーアプリケーション(Webサービスなど)を用意し、各ユーザーに固有の固有のログイン情報を設定する必要があります。独自のスタックオーバーフローログインを持つように、ユーザー名とパスワードをデータベースに与えるだけではありません。 –

+0

大丈夫ですので、私は基本的に私は登録ページを作る必要があります。PHPのページとユーザーがC#のアプリケーションを使用するとき、彼は彼の情報を入力する必要があります(サーバーアプリケーションによって検証) – Kinouk

0

MSDNからこの特定のトピックに関するthis guideを見てください。しかし、これは、セキュリティが焼かれただけです。今度は、鍵のセキュリティを管理する必要があります

0

他の人が述べたように、難読化は、ユーザーがバイナリにアクセスできるクライアントアプリケーションに格納されている接続文字列に対する実際の保護ではありません。

ユーザーが同じ特権で直接データベースを使用することを信頼できる場合を除いて、プログラムから直接データベース接続を使用しないでください。あなた自身のサーバーでホストしているサービスの間にサービス(Webサービス、RESTサービスなど)を持っています。 Linuxは、上記のタイプのサービスをホストすることができます(Linuxの場合はMonoを使用してください)

Webサービスusing MonoまたはLinuxでホストできる他の言語/フレームワークを介してデータベースを公開するにはデータベースに対して実行するアトミック操作ごとにWebサービスメソッドを作成します。

クライアントアプリケーションがデータベースに直接アクセスできるという利点は、クライアントアプリケーションがデータベースとの間でサービスを使用しているときに、クライアントに影響を与えることなく自由にデータストアを変更できることです。データベース内のデータベーススキーマを変更するか、NOSQLソリューションまたはフラットファイルでデータベースを置き換えるかを決めることができます。

データベースと直接通信する代わりにサービスを使用すると、認証/認可要件が1ステップ分移動するため、サービスで実装する必要があります。幸いにも、Webサービスの認証には豊富なサポートがあります。

関連する問題