Java アプリケーションで oracle データベースに接続したいとします。jdbc の URL を書き留めて、そのデータベースのユーザー名とパスワードを入力する必要があります。プログラムのソースがなければ、このパスワードをハックする方法がわかりません。しかし、暗号化する必要がありますか? 暗号化する方法はありますか?SQLインジェクションはどうですか?
3 に答える
あなたはあなたの完全な状況を知るのに十分な情報を実際に提供していませんが、私はあなたが知りたいと思うかもしれないいくつかの一般的な事柄を分解しようとします。まず、dbドライバーには暗号化されていないユーザー名/パスワードを提供する必要があるため、その情報がメモリ内で暗号化されていないことを心配している場合でも、実際には違いはありません。とにかくユーザー名/パスワード文字列についてメモリをスキャンしようとするよりも、一般的にデータベースにアクセスする簡単な方法があります。
バイトコード(.classファイルまたは.jarファイル)を配布するアプリケーションを作成している場合、技術的にはそのバイトコードを調べて、ユーザー名/パスワードなどのハードコードされた文字列を見つけることができます(ただし、文字列がある場合でも、正確に何であるかを判断するのは難しい場合があります)。
Webサーバー上で実行されるアプリケーションを作成している場合、とにかく誰もバイトコードやメモリにアクセスできないため、実際にはアクセスできないはずです(サーバーをハッキングしていない限り)彼らがこの情報のいずれかを取得するために、事前に何らかの方法で)。ただし、データベース接続情報をプロパティファイルで外部化して、ソフトウェアを管理している人が簡単に構成できるようにすることをお勧めします。ただし、要件によってはそうではない場合もあります。
SQLインジェクションはまったく別の質問であり、ここで取り上げるには少し広すぎます。対処方法をよく読んでおくことをお勧めしますが、主にSQLを実行するだけでなく、プリペアドステートメントを使用することになります(パフォーマンスも向上することがよくあります)。
Java で登録フォームに取り組んでいますが、同じ問題に直面しています。私にとって理にかなっている唯一のことは、サインアップにphpフォームを使用して、データベースにアクセスせず、サーバーを介してのみ通信することです。データベースへのユーザー許可を与える代わりに、ユーザーがパスワードを入力したときにパスワードをハッシュした後にのみ、パスワードをハッシュに一致させる一方向の暗号化方法を何とか想定しています。ハッキングについてある程度理解しているので、ユーザーがアクセスできる情報はすべてセキュリティ上の欠陥であると感じています。モデレーターは、パスワードをプレーン テキストでソース コードに保存しないように何度も言っています。SQL には、制限付きの db パーミッションを与えるいくつかの方法があり、必要に応じて情報を削除できます。
以下は、私がある程度信頼できるリンクですが、基本的には、どこかに隠されたzipファイルからハッシュを抽出し、認証中に取得してWebサイトに追加する必要がある紙の証跡を残しています。
https://www.pkware.com/software/developer-tools/sdk/toolkit-for-Java
encrypt
を使用して、パスワードを設定し、DBまたはセキュリティで保護された領域に保存できます。AES algorithm
を作成するJDBC URL
ときに、この情報とdecrypt
それを取得します。詳細については、次のリンクから入手できます
。Java256ビットAESパスワードベースの暗号化
vulnerabilities
SQLインジェクションは、 SQLステートメントの作成に使用されるデータに対して検証が行われないため、コードに存在する別の種類です。