12

GAE は、スケジュールされたジョブの cron ジョブを提供します。誰かが http GET を直接実行できないようにセキュリティを設定するにはどうすればよいですか? 次の例では、ブラウザーの url フィールドにいつでも /updateData と入力して、次の設定でジョブを実行できます。

cron:
- description: daily update of the data in the datastore
  url: /updateData
  schedule: every day 00:00
  timezone: ...
4

4 に答える 4

17

Paul C が言ったことに加えて、以下に示すように、 X-Appengine-Cronヘッダーをチェックするデコレータを作成できます。ところで、ヘッダーはスプーフィングできません。つまり、cron ジョブから発信されたものではないリクエストにこのヘッダーがある場合、App Engine はヘッダーの名前を変更します。この場合、 X-AppEngine-TaskNameをチェックする、タスク用の同様のメソッドを作成することもできます。

"""
Decorator to indicate that this is a cron method and applies request.headers check
"""
def cron_method(handler):
    def check_if_cron(self, *args, **kwargs):
        if self.request.headers.get('X-AppEngine-Cron') is None:
            self.error(403)
        else:
            return handler(self, *args, **kwargs)
    return check_if_cron

そしてそれを次のように使用します:

class ClassName(webapp2.RequestHandler):
    @cron_method
    def get(self):
        ....
于 2013-01-07T13:58:14.080 に答える
6

追加する必要があります

login: admin

ここで詳しく説明されているように、ハンドラーに: Cron の URL を保護する

例えば

application: hello-cron
version: 1
runtime: python27
api_version: 1

handlers:
- url: /updateData
  script: reports.app
  login: admin
于 2013-01-07T10:28:51.783 に答える
0

現時点では、ドキュメントが完全に最新ではない可能性があります。Yao Li が述べたように、確認する必要があるヘッダーは「HTTP_X_APPENGINE_CRON」です。Python 3.7、Django、および GAE Flex のソリューション スニペットを次に示します。

from django.http import HttpResponse,HttpResponseForbidden
if 'HTTP_X_APPENGINE_CRON' in request.META:
    if request.META['HTTP_X_APPENGINE_CRON'] == 'true':
        # Handler 
else:
    return HttpResponseForbidden()
于 2019-11-26T20:48:30.620 に答える