Google マップと連携し、データベースからマーカー情報を取得する ASP.NET アプリケーションを開発しました。マーカー情報はデータベース内のテーブルに分割され、テーブルの名前は会社を反映しています (例: CompanyA_MarkerData、CompanyB_MarkerData など)。新しいマーカー データでマップを定期的に更新するために、JavaScript で setTimeout を使用して、「UpdateMarkers」JavaScript 関数を定期的に呼び出します。「UpdateMarkers」は、データベース クエリを実行する Web サービスを呼び出し、マーカーのリストを JavaScript に返します。これにより、マップが更新されます。
この方法の主な問題は、データベース内のどのテーブルにアクセスするかを Web サービスが認識できるように、Web サービスに会社名を渡す必要があることです。ご想像のとおり、これは、誰でも別の会社名を Web サービスに渡し、自社だけでなく他の会社からもデータを取得できるため、セキュリティ リスクをもたらします。
この問題を回避するために、次のようにプログラムを再構築しています。システム管理者がアプリケーションのユーザーを作成するときに、このユーザーに会社 ID を割り当てることもできます。会社 ID は、ASP.NET の Profile オブジェクトを使用して格納されます。Web サービス コードを共有関数を持つクラスに移動して、ページ内でのみ呼び出すことができるようにします (ただし、Web サービスのように誰からも呼び出すことはできません)。関数には、会社名を渡す必要があります。ただし、JavaScript がこれらの共有関数を直接呼び出すのではなく、一連のページ メソッドを呼び出します (私が理解しているように、これは Web サービスのようにパブリックではありません)。
この 2 番目の方法は、クライアントが別のオプションをコードに渡して許可されていないデータを取得することを許可しないため、最初の方法よりも安全だと思います。サーバー側のコードは、送信する必要があるパラメーターを処理します。しかし、私が見逃しているこれを行うためのより良い方法があるかどうか疑問に思っていますか?
ありがとう
-- アムル