2016-08-25 6 views
0

FlaskベースのWebアプリケーションでCeleryを使用して、サーバー側で非同期タスクを実行し始めました。HTTPリクエストでCeleryタスクIDを使用するのは安全ですか?

いくつかのリソースは、ユーザ/クライアント先の「/アクション」サブリソースを取得するには、例えば、アクションを指定するJSON-体を含むPOSTを送信することができます:

curl -H "Content-Type: application/json" -X POST \ 
    -d '{"doPostprocessing": { "update": true}}}' \ 
    "http://localhost:5000/api/results/123/action" 

を彼らはして202 ACCEPTED応答を得ますヘッダ

Location: http://localhost:5000/api/results/123/action/8c742418-4ade-474f-8c54-55deed09b9e5 

彼らは最終的な結果を得る(またはタスクがまだ実行されている場合は、別の202 ACCEPTEDを得る)ためにポーリングすることができます。

私がアクションのために返すIDはcelery.result.AsyncResult.idです。

これは安全な処理ですか?セロリのタスクIDを直接パブリックに渡すときに私はどのような問題を作りますか?

そうでない場合は、お勧めの方法はありますか?好ましくは、タスクの状態を明示的に追跡することを回避するもの。

答えて

1

タスクIDを使用しても問題ありません。 CeleryはKombuのuuid関数を使用し、uuid関数はデフォルトでuuid4を使用します。 uuid4は、MACアドレス(uuid1は)に基づいているのではなく、ランダムに生成されるので、「十分にランダム」になります。

唯一の他の方法は、ユーザーのすべての実行中のタスクのステータスを返すAPIエンドポイントを持つことです。タスクIDを削除する。ただし、個々のタスクにクエリを実行する機能は削除されます。他のオプションは効果的に異なる乱数の背後にあるタスクIDを隠すので、同じブルートフォース問題が発生します。

セキュリティスタック交換を通じてUUIDに関する質問(https://security.stackexchange.com/search?q=uuid)をお勧めします。これらのうちのいくつかはあなたが探しているものと同等であることは間違いありません。

関連する問題