6

我想保護我的任務隊列URL免受惡意訪問的攻擊。正確保護GAE任務隊列URL(不使用app.yaml)

在視圖的任務隊列請求我有:

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

但我的任務隊列收到403錯誤!我從this GAE documentation的印象中得知Task Queue用戶被認爲是管理員。是什麼賦予了?

注:我使用DjangoNonRel所以我不能指定管理員只在我app.yaml URL訪問,我必須以編程方式做到這一點的看法。

回答

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 

與/任務開始的任何網址/將訪問任務隊列,交通不便,以非管理員的遊客,在不改變任何東西怎麼路線。

+0

不錯。那很完美。謝謝。 – 2011-05-06 18:29:08

4

您的處理程序可以查找任務隊列HTTP標頭,例如X-AppEngine-QueueName。

從官方GAE docs:從任務隊列服務

要求包含下面的HTTP標頭:

X-的AppEngine-QUEUENAME
X-的AppEngine-TASKNAME
X-的AppEngine-TaskRetryCount
X-AppEngine-TaskExecutionCount
X-AppEngine-TaskETA

這些標題由Google App Engine在內部設置。 如果您的 請求處理程序發現任何這些標頭,它可以相信 請求是一個任務隊列請求。如果上述標題中有任何一個是 ,並且存在於您的應用的外部用戶請求中,則會被剝離。

相關問題