如何处理发送到django的csrf凭证作为url参数?
我问,因为那显然是the only way to submit a file upload via a form in an iFrame。
大多数在线示例都显示将csrf凭据作为标题传递,
xhr.setRequestHeader("X-CSRFToken", csrfToken );
但这不是ie / opera中iFrame传输的选项。
我可以使用csrf_exempt
,但这会使我的网站容易受到攻击。
答案 0 :(得分:2)
您可以创建一些从GET参数中获取csrf_token
的中间件,并在CsrfViewMiddleware
尝试验证之前将其放在请求上
class CsrfGetParamMiddleware(object):
def process_request(self, request):
request.META['HTTP_X_CSRFTOKEN'] = request.GET.get('csrf_token')
return None
将此中间件置于CsrfViewMiddleware
MIDDLEWARE_CLASSES = (
'CsrfGetParamMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)
这样可以避免自己验证或继承CsrfViewMiddleware