Правильная защита URL-адресов очереди задач GAE (без использования app.yaml) - PullRequest
6 голосов
/ 06 мая 2011

Я хочу защитить свои URL-адреса очереди задач от злонамеренного доступа.

В представлениях, которые запрашивает очередь задач, я получил:

if not users.is_current_user_admin():
    return HttpResponse(status=403)

Но мои очереди задач получают 403ошибки!Из этой документации GAE у меня сложилось впечатление, что пользователь Task Queue гарантированно является администратором.Что дает?

ПРИМЕЧАНИЕ: Я использую DjangoNonRel, поэтому в моем app.yaml я не могу указать только URL-адрес администратора, я должен сделать это программно в представлениях.

Ответы [ 3 ]

10 голосов
/ 06 мая 2011

Задачи могут обойти ограничения login: admin, однако users.is_current_user_admin() все равно вернет false, поскольку технически нет текущего пользователя.

Использование Django-nonrel не должно мешать вам защитить ваши задачи с помощью приложения.YAML.Просто добавьте защищенный обработчик над своей универсальной Django:

handlers:    

- url: /tasks/.+
  script: main.py
  login: admin

- url: .*
  script: main.py

Все URL-адреса, начинающиеся с / tasks /, будут доступны в очереди задач и недоступны для посетителей без прав администратора, без изменения способа маршрутизации.

4 голосов
/ 03 июля 2012

Ваши обработчики могут искать HTTP-заголовок очереди задач, например X-AppEngine-QueueName.

Из официальных Документов GAE :

Запросы из очереди задачслужба содержит следующие заголовки HTTP:

X-AppEngine-QueueName
X-AppEngine-TaskName
X-AppEngine-TaskRetryCount
X-AppEngine-TaskExecutionCount
X-AppEngine-TaskETA

Эти заголовки устанавливаются внутри Google App Engine. Если ваш обработчик запросов находит какой-либо из этих заголовков, он может доверять тому, что запрос является запросом очереди задач. Если какой-либо из вышеуказанных заголовков присутствует во внешнем пользовательском запросе к вашему приложению, они удаляются.

0 голосов
/ 23 января 2019

Вы можете сделать это, выполнив 2 проверки

  • Проверить удаленный адрес, это будет 0.1.0.1
  • Проверить существование заголовка [ X-Appengine-Cron].

Это защитит вас URL-адреса очередей задач (это применимо только для очередей извлечения, насколько мне известно).

Я написал декоратор, который выполняет эту проверку для меня. Надеюсь, это было полезно

Для получения дополнительной информации, пожалуйста, обратитесь Документы

...