0

ご挨拶!

作業中のアプリケーションでコンパクトなデータベースを展開する必要があります。データベースは、アプリが既に認識したデータのキャッシュとして機能し、そのデータは決して変更されないため、キャッシュされた値が古くなることはありません。私は SQLite を選び、C# で書いています。

データベース ファイルを保護して、ユーザーが簡単にアクセスしたり編集したりできないようにしたいと考えています。アプリケーションへのアクセスのみを維持します。ここで、1 つのオプションはパスワード保護を使用することです。ただし、Reflector のようなツールを使用すると、ソースの元のバージョンに近いものを簡単に表示し、パスワードやファイルごとのパスワードの生成方法を確認して、これを複製することができます。

この結果またはそれに近いものを達成する方法について何か提案はありますか? 人々は過去にこのようなことをしたことがありますか?

ありがとう!

4

3 に答える 3

4

あいまいさによるセキュリティ。

アプリで復号化できる場合は、ユーザーも復号化できます。

安全に保管したい場合は、自分で保管する必要があります。最善の策は、データベースをサーバーに保存し、Web サービス経由で利用できるようにすることです。独自のサーバーでアクセス制御チェックを実行して、アプリケーションがデータベースの必要な部分にのみアクセスできるようにします。

于 2010-06-29T21:06:56.580 に答える
1

明確な答えはありません (リリース展開中にコードを難読化する、パスワードを非常に長くする) というゴールデン ルールが存在します。彼らが望むなら(そしてスキルを持っているなら)。

あなたができることは、彼らにとって物事を困難にすることだけです。

于 2010-06-29T21:07:25.227 に答える
0

この分野は私の得意分野ではありませんが、私が提案できることの 1 つは、実際に送信しているデータについて考え、より機密性の高いデータが最初にクライアントに送信されるのを制限できる方法があるかどうかを判断することです。場所。

ID 番号やアカウント番号などをクライアントに送信することに関心がある場合は、これらの値を、アプリケーションの外部では意味のないクライアントのみのバージョンに変換できます。サーバーには、実際の値とクライアントのみの値の間の変換を含むテーブルがある場合があります。

このテーブルがサーバーのデータベースに保存されているとしましょう (クライアント データベースではありません!)。

RealAccountNumber   ClientOnlyAccountNumber
981723              ABC123
129847              BCD234
923857              CDE345
...

そのため、クライアントは ClientOnlyAccountNumber 列のアカウント番号のみを確認し、クライアントがアカウント "ABC123" で実行されるアクションの要求をサーバーに送信すると、サーバーはそれをアカウント番号 981723 に変換することを認識します。

于 2010-06-29T21:25:34.417 に答える