2013-05-02 111 views

回答

2

您可以創建一些中間件從GET PARAMS需要csrf_token,並把它放在以前CsrfViewMiddleware嘗試請求來驗證這個中間件CsrfViewMiddleware

MIDDLEWARE_CLASSES = (
    'CsrfGetParamMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
) 

上述

class CsrfGetParamMiddleware(object): 
    def process_request(self, request): 
     request.META['HTTP_X_CSRFTOKEN'] = request.GET.get('csrf_token') 
     return None 

將這個拯救你從驗證它自己或子類CsrfViewMiddleware

+0

v有趣的想法,但有沒有秒在第一個地方使用csrf作爲url參數時需要考慮哪些注意事項? – jedierikb 2013-05-02 15:20:24

+1

TBH我不確定,根據http://stackoverflow.com/a/198473/682968 GET和POST具有相同的安全級別,因此它與「正常」發佈表單實際上沒有區別。此外,csrf令牌在頁面源代碼中也可以免費使用,所以任何人都可以在那裏閱讀它。 – rockingskier 2013-05-02 15:25:42

+1

@rockingskier:您提到的答案已被接受,但獲得的投票少於其他答案的3倍以上(http://stackoverflow.com/a/1744404/548696),這並非沒有原因。 – Tadeck 2013-05-06 23:30:28