2

ユーザーのパスワードを生成してデータベースに保存する Java デスクトップ アプリケーションを作成しています。

私の質問は、アプリケーションに SQL クエリを実装する最も安全な方法は何ですか?

確かに、ソース コード内にクエリを含めることは安全ではありません。私の回避策は、db ファイルをローカルに保存することですが、データを外部サーバーに保存することをお勧めします。

では、ソース コードを埋め込まずに Swing アプリケーションに SQL クエリを実装するにはどうすればよいでしょうか。

4

3 に答える 3

2

確かに、ソース コード内にクエリを含めることは安全ではありません。

機密性の高い SQLクエリは見たことがありません。通常、ユーザーからの機密データ (Swing フィールドへのパスワード入力など) を受け取り、これを使用して既存のパラメーター化されたクエリを入力します。

UPDATE users SET password=? WHERE username=?
于 2013-10-23T12:33:14.787 に答える
0

クエリ テキストを保護する必要はありません。クエリで使用されるパラメーターのログ記録に関して懸念がある場合があります。生のパスワードをデータベースに保存する場合、これは問題です。そのため、そもそも生のパスワードを保存しないことをお勧めします。

SQL を Java コードに埋め込む方法について少し詳しく説明します。アプリケーションがデータベースで動作する場合、データベースを呼び出す必要があり、これは SQL ステートメントの実行を意味します。これを回避する唯一の方法は、この作業を別のアプリケーションに委任して、アプリケーションが SQL ではなくカスタム プロトコル/API を使用し、そのアプリケーションが代わりに SQL クエリを実行するようにすることです。

SQL を Java コードとは別に保存する必要があるかもしれませんが、これはセキュリティ上の懸念によるものではなく、主にアプリケーションをより適切に構造化する必要があるためです。SQL を Java コードに埋め込まない主な原動力は、コードの読みやすさ、パフォーマンス、メンテナンス、およびコードの再利用です。

データベースにアクセスするときは、ORM を使用するのが一般的です。この場合、アプリケーションに SQL コードがまったくなく、ORM API を介してデータベースにアクセスすることは珍しくありません。たとえば、休止状態では、クエリは次のようになります

User user = session.createCriteria(User.class)
    .add( Restrictions.eq("name", userName) )
    .uniqueResult();

また、選択した ORM で直接サポートされていない SQL クエリを実行する必要がある場合でも、SQL テキスト自体は通常、付随する xml ファイルに保存されます。

後者の場合、技術的に SQL は Java コードに埋め込まれていませんが、アプリケーション パッケージの 1 つに存在することに注意してください。

于 2013-10-23T12:43:07.850 に答える
0

アプリケーションを実装せずにアプリケーションで何かを実行する方法がわかりません。私は単にあなたのアプローチを理解していません。あなたはおそらく新しいユーザーか何かを登録したいと思っていて、データベース構造を明らかにしたくないと思いますよね? DBを(SQLで)直接操作し、アプリにコーディングしないために、そのようなことを行うことはできません。

解決策: ニーズに合わせて専用の REST API を作成します。すべてのデータベース操作の処理はサーバー側で行われます(サーバーが必要です-phpの単純なApacheホスティングである可能性があります)ので、DB構造の啓示などはありません。必要なのは、適切なデータ(ユーザー名とパスワード)を使用してコマンドをサーバーに送信することだけです. 最大限のセキュリティを確保するには、API との通信に SSL を使用する必要があります。

ありがとうございました。

于 2013-10-23T12:34:01.857 に答える