2012-02-19 19 views
0

私が開始する前に、多くの人がすでにこの質問をしていることを知っています。しかし私は本当に私が探していた解決策を見つけませんでした。だからここで私のプロジェクト&の要件を説明して、&同じ質問をしています。クライアント/サーバーベースのJavaデスクトップアプリケーションのデータベース資格情報を保護する方法

私はリモート電子投票システムの最終年度プロジェクトを行っています。 は(各&選挙委員会またはそうすることによって、すべての有権者に与えられた)LOGINID & LOGINPASSを使用してアプリケーションにログインへの公共のユーザーを可能にするJavaを、使用して、クライアント側のアプリケーションを開発します。 クライアント側のアプリケーションでは、選挙に参加している候補者のリストが表示されます。&にはラジオボタンが1つあります。選択した後、ユーザは、「キャスト投票」ボタンを押して「投票をキャスト」することができる。

問題は「投票を行う」ために、この情報をサーバー上のデータベースに送信する必要があります。どのように私はクライアント側のアプリケーションからデータベースに接続して、目的のテーブル/詳細を更新できますか?私はデータベースの資格情報をソースコードにハードコーディングしていましたが、最近は非常に安全でないことを認識しました。これらも同様にエンドユーザーが読み取ることができるので

私は本当に、プロパティファイルまたは&は、OSの機能を使って、それを保護するCONFIGファイルを使用するカント

(彼らはOSの管理者/所有者であるため)そして、ああ、私はそれをソースコードにハードコードするか、暗号化するか、またはプロパティファイルを使用するかどうかにかかわらず、クライアント側のアプリケーションをJARファイルなどで配布します。&デコンパイルデータベースの詳細を知るために

これに代わる方法はありますか? 回避策はありますか? ある場合、その詳細や実装方法を教えてください。

ありがとうございます。

+0

リモート投票(電子版でも紙版でも)は、有権者が強制的に強制されているかどうかを判断できないという意味で、基本的に損なわれています。 – DNA

+0

うん、私はそれを認識しています。そのプロジェクトはちょうど私のプロジェクトの仕事になるでしょう、私は実際に政府や他の組織にそれを(少なくとも有権者を強制することができるような組織ではない)求めても構いません。 ありがとうございます:) –

答えて

2

通常のクライアントサーバーアプリケーションでは、クライアントからデータベースサーバーに直接接続しません。むしろ、クライアントは(LOGINIDとLOGINPASSを認証として)サーバーに接続し、データベースサーバーに接続します。

つまり、クライアントはデータベースに関する情報を保存せず、サーバーはそのデータベースへのすべてのアクセスを仲介します。

+0

返信いただきありがとうございます。 うん、それだけだと思う​​よ。 どのように私はそれについて進めることができますか? SSLソケットをクライアントからサーバーに接続し、クライアントとサーバーから情報を渡しますか?それは私がそれについて行くべきである方法ですか? S.私はJavaがうまくいきますが、これは私の最初のクライアント/サーバーベースのアプリケーションで、少しのセキュリティと内容が必要です。 –

1

ユーザーがデータベースに直接リモートで書き込ませることはありません!!!!!

サーバアプリケーション(php、servlets?)を作成すると、ユーザはログインでき、このアプリケーションはDBを更新できます。

これを行う方法がわからない場合は、真剣に投票アプリケーションを作成しないでください。

2

私は2つのことに対する解決策は同じだと思います。あなたはすでに、ユーザ名とパスワードが投票者に合っているかどうかをサーバに何らかの形で尋ねています。

ので、データベースの前に、このWebサービス作り、単にこれは、ユーザーに関する情報を返す2つのコール(両方ともloginuser & loginpassによって認証)

GET /ユーザー/ _self

を持っています適切に挨拶し、パスワードを知っていることを確認することができます。

あなたはブルートフォース攻撃やサービス拒否を許可していないことを確認する必要があります。

POST/candiates /候補

これは、ログインしているユーザーからの投票を登録します。

これをSSL上に置き、クライアントとサーバーの両方の証明書の検証を使用すると、クライアントが不正なクライアントにログインの詳細を送信する可能性があり、サーバーが取得できない可能性があります古いクライアントからの無効な要求

これをWeb Startアプリケーション(署名付きjarファイルが必要)にして、クライアントにキーインストールを少し行うと、合理的に安全なパスが得られます。

ファイアウォールで保護されたゾーンにWebアプリケーションをDMZに配置します。 Webアプリケーションからデータベースへのアクセスは通常の方法で行うことができますが、多少のセキュリティ保護されたアプリケーションでは、DMZボックスが侵害された場合でも有効な投票を行うことができません。

なお:

  • 上(BASIC認証と仮定して)どこでもクライアントアプリ
  • クライアントとサーバーの相互利用者を確認、ユーザーのパスワードが送信される
  • 公開鍵のものにはパスワードがありませんワイヤーですが、このワイヤーはSSLワイヤーです。
  • DIGEST auth over SSLを使用すると、ユーザーのパスワードが決して電線を通じて送信されないことを意味します。
+2

これは宿題の割り当てには問題ありません。本当の投票のものははるかに難しいです! https://www.eff.org/issues/e-votingを参照してください。 – time4tea

0

クライアント側で実行されているこのプログラムは、基本的に安全ではないことにご注意ください。

これは単なる大学プロジェクトの仕事であり、決して本当の投票システムにはなりませんが、あなたはこの事実について深く確信しなければなりません。

「あなたがプログラムに埋め込んだ秘密鍵は、そのプログラムに完全にアクセスできる人が回復することができます。できることは、時間がかかることです」。理由を知るにはstackexchangeに関するこの質問を参照してくださいhttps://security.stackexchange.com/questions/35235/how-to-effectively-save-database-password-inside-desktop-application

これは、DRMが常にすべてのコンピューティングの歴史において敗北した主な理由です。

もっと現実的な投票システムを実装したい場合は、ユーザーがブラウザを使用して投票するWebアプリケーション(JavaEEなど)として実装することをお勧めします。 これはより安全で、有権者が自分のコンピュータにプログラムをインストールする必要はありません。

それから、有権者と有権者の強制のアイデンティティーの問題がありますが、私は誰にとっても分かりやすいと思います。

関連する問題