正确保护GAE任务队列URL(不使用app.yaml)

Chr*_* W. 6 django google-app-engine task-queue django-nonrel djangoappengine

我希望保护我的任务队列URL免受恶意访问.

在任务队列请求我的视图中:

if not users.is_current_user_admin():
    return HttpResponse(status=403)
Run Code Online (Sandbox Code Playgroud)

但我的任务队列收到403错误!我从这个GAE文档中得到的印象是,任务队列用户已被gauranteed称为管理员.是什么赋予了?

注意:我正在使用DjangoNonRel,所以我无法在我的指定管理员唯一的URL访问app.yaml,我必须在视图中以编程方式.

Dre*_*ars 10

任务可以绕过login: admin限制,但users.is_current_user_admin()仍然会返回false,因为技术上没有当前用户.

使用Django-nonrel不应该阻止您使用app.yaml保护您的任务.只需在Django catch-all上面添加一个受保护的处理程序:

handlers:    

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

- url: .*
  script: main.py
Run Code Online (Sandbox Code Playgroud)

任何以/ tasks /开头的URL都可以被任务队列访问,非管理员访问者无法访问,而不会改变任何路由.


Eri*_*ers 5

您的处理程序可以查找任务队列HTTP标头,例如X-AppEngine-QueueName。

来自GAE官方文档

来自任务队列服务的请求包含以下HTTP标头:

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

这些标头由Google App Engine在内部设置。如果您的请求处理程序找到这些标头中的任何一个,它就可以相信该请求是任务队列请求。 如果您的应用程序的外部用户请求中存在上述任何标头,则会将其剥离。