6

我想保护我的任务队列 URL 免受恶意访问。

在任务队列请求的视图中,我得到了:

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

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

注意:我使用的是 DjangoNonRel,所以我不能在我的 中指定仅限管理员的 url 访问app.yaml,我必须在视图中以编程方式进行。

4

3 回答 3

10

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

使用 Django-nonrel 不应阻止您使用 app.yaml 保护您的任务。只需在 Django 包罗万象的上方添加一个受保护的处理程序:

handlers:    

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

- url: .*
  script: main.py

任何以 /tasks/ 开头的 URL 都可以被任务队列访问,并且非管理员访问者无法访问,而不会更改任何路由的方式。

于 2011-05-05T22:59:32.737 回答
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 在内部设置。如果您的请求处理程序找到这些标头中的任何一个,它可以相信该请求是任务队列请求。 如果上述任何标头出现在对您的应用程序的外部用户请求中,它们将被剥离。

于 2012-07-03T10:28:43.413 回答
0

您可以通过进行 2 次检查来完成此操作

  • 检查远程地址,它将是0.1.0.1
  • 检查是否存在标头 [ X-Appengine-Cron ]。

这将保护您的任务队列 URL(据我所知,这仅适用于拉取队列)。

我写了一个装饰器来为我做这个检查。希望这会有所帮助

有关更多信息,请参阅文档

于 2019-01-23T06:39:30.733 回答