1


1

ユーザーが入力したデータを収集し、それをバックエンドサーバーで実行しているWebサービスにポストするフレックスアプリケーションがあります。 flexアプリケーションはユーザーを認証せず(アカウントを設定しなくても誰でも使用できます)、HTTPSを使用してWebサービスと通信します。

特定の不正な要求、DoS攻撃などを防ぐためのXMLファイアウォールがあり、Webサービスはクライアントから受信したすべてのデータを検証します。

コンテンツに署名する場合は、XMLファイアウォールを使用して署名を検証できますが、クライアントに埋め込まれている証明書タイプのデータは、何らかのコンパイル手段を使用してflexアプリケーションから抽出できると想定します。

私の質問は、Webサービスへの呼び出しを私のflexクライアントからの呼び出しだけに制限する方法はありますか? 私はユーザーが悪い情報を入力することができることを理解していますが、私は本当に他のクライアントまたは「ボット」を防ぐことを試みています。

セッションベースのソリューションを利用するためにユーザーアカウントを持つことを紹介するのであれば、最初の段階でアカウントを設定しようとしたときに、まだ同じ問題に直面するでしょう(まだflexアプリケーションで行う必要があります) ?

2 Answer


0


あなたのサーバーにcrossdomain.xmlを追加することができますので、あなたのフレックスアプリだけがあなたのドメインサービスにアクセスすることができます。 そのため、Flexアプリが最初のサービス呼び出しを行うときには、IDが存在する必要があります。 サービス応答を使用して、別のIDを生成し、それをフレックスに送り返して今後の呼び出しなどで使用します。


0


TheBrainが述べたように、crossdomain.xmlファイルはあなたが始める必要があるところですが、これは他のフラッシュベースのアプリケーションを遠ざけるだけです。 ランダムIDについての彼の考えも良いものですが、私は実装するのがやや複雑であることがわかりました。 ユーザーアカウントは、flexアプリケーション以外の方法でアカウントを設定することでのみ実装できます(おそらくより安全なもの)。

もう1つの方法は、アプリケーションとWebサービス側との間で共有パスワードを使用し、両側で知っている可能性があるある種のソルトを使用して両側でそのパスワードを暗号化することです。 私の最初の本能は時間ベースの塩について考えることです。 フレックスアプリケーションからのタイムスタンプを残りのリクエストと一緒に渡してから、パスワードと同じタイムスタンプを結合してハッシュし、それを渡すこともできます。 Webサービスでリクエストを受け取ると、同じパスワード(平文のリクエストでは渡されない)と渡されたタイムスタンプを受け取り、同じアルゴリズムを使用してハッシュします。 それから比較しなさい。 それらが一致すればそれは認証された要求です。 パスワードの辞書を保存しておき、曜日ごとに違うものを使うこともできます。 ただし、それを行う場合は、ハッシュされたパスワードを決定する2つの方法が同じであることを確認してください。 これはほとんどのアプリケーションに十分なセキュリティを提供するはずです。 これのどれかが明確化を必要とするかどうか、または私が質問を誤解したかどうか私に知らせてください。

あなたの質問をもう一度読んだ後、私はあなたが逆コンパイルについて心配しているのを見ます。 これに対する答えは私の頭の上にはありません。 パスワードをアプリケーションの外部に保存して読み込むこともできますが、逆コンパイルしてそのファイルを読み込めるようにするという問題は解決されません。 私はこれについてもう少し考え、私はそれに対して保護するために何かを思い付くことができるかどうかを確認します。