2013-01-07 10 views
6

GAE udostępnia zadania cron dla zaplanowanych zadań. W jaki sposób ustawić niektóre zabezpieczenia, aby uniemożliwić komuś wykonanie bezpośredniego http GET? W poniższym przykładzie, mogę wpisać/updateData w dowolnym momencie w polu adresu URL przeglądarki, aby wykonać zadanie w następujących ustawieniach:Aparat aplikacji Google: bezpieczeństwo zadań crona

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

Odpowiedz

6

Oprócz tego, co powiedział Paul C można utworzyć dekorator, który sprawdza X-AppEngine-Cron nagłówek, jak pokazano poniżej. Przy okazji nagłówek nie może zostać sfałszowany, co oznacza, że ​​jeśli żądanie, które nie pochodzi z zadania cron, ma ten nagłówek, App Engine zmieni nazwę nagłówka. Można również napisać podobną metodę dla zadań, sprawdzając w tym przypadku: 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 

i używać go jako:

class ClassName(webapp2.RequestHandler): 
    @cron_method 
    def get(self): 
     .... 
6

Trzeba dodać

login: admin 

do zakrętu, jak szczegółowe tutaj: Securing URLS for Cron

EG

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

handlers: 
- url: /updateData 
    script: reports.app 
    login: admin 
+0

dodałem 'logowanie: admin' i teraz moje zadanie cron odbiera 403. –

+0

@ Alex75 on pracuje, aby dodać' login: admin' w app.yaml sekcja obsługi do zabezpieczenia usługi cron w standardowym środowisku Google App Engine. Ale na Flex App Engine, zmienił sposób zabezpieczenia swoich programów obsługujących cron w ten sposób (przykład PHP): Sprawdź $ _SERVER ['HTTP_X_APPENGINE_CRON'], a jeśli to prawda, żądania pochodzą z usługi cron App Engine. –