将CSRF凭据作为url参数传递?

时间:2013-05-02 13:51:29

标签: django iframe security csrf

如何处理发送到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,但这会使我的网站容易受到攻击。

1 个答案:

答案 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