ユーザー認証のために MySql データベースに直接接続する Swing アプリケーションがあります。
- アプリケーションのビット コードは、インターネットでダウンロードできます。
- 接続情報は静的変数にあります
認証を処理するようにサーバーをプログラムする必要があることはわかっていますが、最初の要件では認証のユースケースについて言及されていませんでした
私の質問は次のとおりです。アプリケーションの難読化は、接続情報をエンコードするのに十分ですか?
いいえ、ほとんどの人はバイト コードをリバース エンジニアリングまたは逆コンパイルして、変数を確認できます。自分で試してみて、上級ユーザーから何も隠していないことがわかります。
この場合、あなたが言ったように、認証を処理するためにクライアントとデータベースの間にサービスが必要です。
サービスには、データベースへのアクセスを許可/禁止するユーザー アカウントがあります。
編集:
この逆コンパイラを使ってみて、うまくいかないことを自分で確かめてください。
あなたは、あいまいさによるセキュリティについて彼らが何を言っているのか知っています! (ヒント: セキュリティではありません)。
それを暗号化します (ただし、サーバー側のコンポーネントがないように見えるため、これを行うための実行可能な方法がわかりません)。または、あなたが言ったように認証サーバー側を行います。
私は手早く汚いことをしたいと思っていましたが、最終的には、正しいことをするのにもそれほど時間はかからないことに気づきました。私がやったことは、サーバー側でDAOを公開するファサード、サーバーとJavaソケットを介して通信するクライアントオブジェクトを持つことです。
次に、クライアントから DAO を直接呼び出す代わりに、メソッドの名前を String として渡して、サーバー上のメソッドを呼び出します。そして、リフレクションの助けを借りて、ファサードは DAO で適切なメソッドを呼び出します。
文字列をエンコードしてセキュリティ トークンを追加する必要があると思います。