2

まず第一に、これが数回尋ねられたことを知っており、この件について多くの調査を行いましたが、決定的な答えを見つけることができないようです. ここで重要な何かが欠けているか、これが不可能であり、あなたの時間を無駄にしています. ここに行きます:

ID、ある時点で変更する必要があるブール値 (0 または 1)、および何らかの情報を含む定数文字列値で構成される、たとえば 1000 行のみを格納するデータベースを想像してみてください。ユーザーがクライアント Java アプリで必要なアクションをコミットした場合にのみ、情報にアクセスして値を変更できます。そこだけが肝心。

ワールド ワイド ウェブを検索しているときに、自分のニーズに合った 2 つのオプションを見つけました。

  1. データベース自体に各ユーザーの権限を設定し、ユーザーが独自のユーザー名とパスワードを使用してアプリからログインできるようにします。その後、クライアント アプリはユーザーの希望に応じてデータベースと通信し、必要に応じてデータベースの読み取りと書き込みのタスクを実行できます。

  2. 3 層アプローチを使用して、Java アプリがクエリを実行し、Java アプリが解析できる種類のエンコードされた json 文字列を返す PHP インターフェースと通信するようにします。クライアントのユーザー名とパスワードをPHPインターフェイスに送信すると、クライアントが適格かどうかがチェックされ、それに応じてクエリが実行されます。大したことはありません。

私が理解できないように見えるのは、Java クライアントのみを変更してデータを取得する方法です。たとえば、アプローチ 1 で文字列の内容を知りたい場合、単純にユーザー名とパスワードを使用して、データベースに直接クエリを実行できます。クエリは、逆コンパイル後に Java アプリから簡単に取得できます。#2 については、アプリが逆コンパイルされている場合、PHP インターフェースもリバース エンジニアリングされる可能性があり、ユーザーはデータベースの実際のパスワードとユーザー名を知らなくても、PHP スクリプトを悪用してデータベースにクエリを実行できます。

ユーザーはまったく信頼されておらず、Java アプリで特定の条件が満たされるまで、データベースの内容は秘密のままにしておく必要があることを指摘する必要があります。それを達成する方法はありますか?そして、私が気付いていない方法があるとすれば、これらの 2 つのオプションに固執していないことは間違いありません。事前にご協力いただきありがとうございます。

4

1 に答える 1

0

PHP バックエンドで HTML5/Javscript SPA と同様のものを実装していますが、すべての MySQL トランザクションを処理するために Java サーバー API に SOAP 要求を行います。これの利点は、クライアントが HTML と縮小された Javascript のみを認識し、Java サーバーへの呼び出しがまったく表示されないことですが、PHP サーバーへの AJAX 呼び出しを引き続き表示できることです。Java 関数はクライアントではなくサーバーから直接 SOAP 経由で呼び出されるため、私はセキュリティの 90% を HTML5/PHP サーバーに集中させています。Java サーバーは、サーバー IP へのアクセスを制限し、適切にフォーマットされた SOAP 要求のみを受け入れる必要があります。

そうは言っても、私はこれを思いとどまらせるためのチェックを行っており、ユーザーの 99% がシステムを「ハッキング」するのを防ぐことができれば幸いです。セッション、タイマーを使用して、クライアントがあまりにも多くの呼び出しを迅速に行ったり、事前に呼び出しを行わなかったりしないようにします。それ、コードの縮小、呼び出しでの特定のヘッダーの設定など。はい。ただし、試行を追跡するためのログ システムが用意されています。その後、無効なリクエストを頻繁に行う人などへのアクセスをブロックできます。

最終的には同様の設定でうまくいきますが、無効な呼び出しをログに記録し、それらを定期的に処理するか、通知システムを設定することで、試行を減らすことができることに注意してください. ユーザーが逆コンパイルできる Java 部分で MySQL 呼び出しを直接使用している場合、私はそれをお勧めしませんが、代わりに、それらの呼び出しを処理する PHP サーバー上の関数を呼び出すだけです。これにより、少なくともデータベースの説明がユーザーから隠され、ハッキングが阻止されます。

すべてのアプリで、注意深く監視してください。ハッキングに成功したら、次にそれを阻止する方法を見つけてください。そうすれば、二度と同じように機能することはありません。

于 2013-04-20T15:55:55.637 に答える