6

मैं दुर्भावनापूर्ण पहुंच के विरुद्ध अपना कार्य कतार यूआरएल सुरक्षित करना चाहता हूं।जीएई कार्य कतार यूआरएल को उचित रूप से सुरक्षित करना (app.yaml का उपयोग किए बिना)

दृश्यों में टास्क कतार अनुरोध करता है कि मुझे मिल गया है:

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

लेकिन मेरे टास्क कतार 403 त्रुटियों प्राप्त कर रहे हैं! मैं this GAE documentation से छाप के नीचे था कि कार्य कतार उपयोगकर्ता को व्यवस्थापक होने की गारंटी थी। क्या देता है?

नोट: मैं DjangoNonRel उपयोग कर रहा हूँ तो मैं व्यवस्थापक मेरी app.yaml में केवल यूआरएल पहुँच निर्दिष्ट नहीं कर सकते, मैं विचारों में प्रोग्राम के रूप में यह करने के लिए किया है।

उत्तर

10

कार्य login: admin प्रतिबंध बाईपास सकता है, लेकिन अभी भी users.is_current_user_admin() अवास्तविक लौटाते हैं, वहाँ के रूप में तकनीकी रूप से कोई वर्तमान उपयोगकर्ता है।

Django-nonrel का उपयोग करके आपको अपने कार्यों को app.yaml से सुरक्षित रखने से नहीं रोकना चाहिए। अपने Django बाकी-सब बस के ऊपर एक संरक्षित हैंडलर जोड़ने:

handlers:  

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

- url: .* 
    script: main.py 

कोई भी URL जो/कार्य के साथ शुरू /, कार्य कतार में सुलभ और गैर-व्यवस्थापक आगंतुकों तक नहीं पहुंच सकेंगे बदलते कुछ भी कैसे मार्गों के बिना।

+0

अच्छा। यह बिल्कुल सही है. धन्यवाद। –

4

आपके हैंडलर एक कार्य कतार HTTP शीर्षलेख, जैसे X-AppEngine-QueueName की तलाश कर सकते हैं।

आधिकारिक GAE docs से

: टास्क कतार सेवा से

अनुरोध शामिल निम्नलिखित HTTP हेडर:

एक्स AppEngine-QueueName
एक्स AppEngine-TaskName
एक्स AppEngine-TaskRetryCount
एक्स AppEngine-TaskExecutionCount
एक्स AppEngine-TaskETA

ये शीर्षलेख Google App Engine द्वारा आंतरिक रूप से सेट किए गए हैं। यदि आपका अनुरोध हैंडलर इनमें से कोई भी शीर्षलेख पाता है, तो यह भरोसा कर सकता है कि अनुरोध एक कार्य कतार अनुरोध है। यदि उपरोक्त में से कोई भी शीर्षलेख आपके ऐप के बाहरी उपयोगकर्ता अनुरोध में मौजूद है, तो वे छीन दिए गए हैं।