0

私はJavaでプロジェクトに取り組んでおり、クライアントから統計を収集できることを望んでいましたが、発生する可能性がある問題は、収集に使用される変数の操作であり、不正な統計につながる可能性があります。変数の操作を防ぐことは何らかの方法で可能ですか、それとも常に可能ですか?

例: クライアントから 1 時間ごとに行われたアクションをログに記録したいと考えています。実行されたアクションの量のカウンターとして機能する変数が操作され、はるかに大きな量がカウンターに追加されます。次に、このデータはサーバーにアップロードされ (もちろん、さらに起こりうる問題を防ぐために多層アーキテクチャを使用します)、「正当」と見なされます。

これを防ぐ方法はありますか?

4

2 に答える 2

1

データのアップロード方法に応じて、情報を保護するさまざまな方法があります。

ある種のテキスト ファイルまたはデータ ファイルをアップロードする場合、基本的な暗号化を使用し、パスワード付きの ZIP であっても、一般ユーザーが情報を変更するのを防ぐには十分です。

また、アプリケーションで RMI または Web サービスを使用して情報をアップロードするだけで、データを操作するための変更をユーザーに与えることはありません。

もちろん、これはすべて、アプリケーション自体が情報を収集することを前提としています。ユーザーがデータを入力する機会があれば、偽の情報を提供するのを防ぐ実際の方法はありません。

これがデスクトップ アプリケーションなのか Web アプリケーションなのかはわかりませんが、アップロード ファイルを何らかの方法で暗号化することをお勧めします。複雑である必要はありません。誰かがテキスト エディターで編集できない程度であれば十分です。

クライアント マシンで何かが実行されている場合は、それを操作できることを覚えておいてください。Java は安全な言語ではありません。さらに言えば、安全な言語ではありません。アプリケーションを保護するために多くのことを行うことができますが、それをクラックできる少し賢い人が常にいます。

于 2012-06-11T05:22:58.160 に答える
0

これを行う場合は、セキュリティで保護されたマシンで統計の蓄積を行います。プライマリデータ収集コードに「イベント」メッセージをアキュムレータに送信させ、アキュムレータに生のイベントとその到着タイムスタンプのログを保持させます。これにより、人々が統計を操作するのを防ぐことはできませんが、事後に疑わしいパターンを検出しやすくなる可能性があります。

そのアイデアに基づいて、(ユーザーのコンピューター上の)イベントジェネレーターアプリケーションが、共有秘密または公開鍵/秘密鍵の暗号化を含むある種のハンドシェイクを使用するように調整できます。これを完全に保護できるとは思いませんが、コードをリバースエンジニアリングするスキルがなくても、隠すことによるセキュリティで、人々による不正行為に対処するのに十分である可能性があります。

しかし、Ewaldが言うように、アルゴリズムプロセスは、実行するハードウェアを十分に制御できる人がリバースエンジニアリングできます。プロセスが動作するために「秘密」を使用する必要がある場合、その秘密を明らかにすることができます。

于 2012-06-11T07:02:13.207 に答える