2

您如何处理作为 url 参数发送到 django 的 csrf 凭据?

我问是因为这显然是通过 iFrame 中的表单提交文件上传的唯一方法

大多数在线示例显示将 csrf 凭据作为标头传递,

xhr.setRequestHeader("X-CSRFToken", csrfToken );

但这不是 ie/opera 中 iFrame 传输的选项。

我可以使用csrf_exempt,但这会使我的网站容易受到攻击。

4

1 回答 1

2

You could create some middleware that takes csrf_token from the GET params and places it on the request before CsrfViewMiddleware attempts to validate

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

Place this middleware above the CsrfViewMiddleware

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

This save you from validating it yourself or subclassing CsrfViewMiddleware

于 2013-05-02T15:07:21.560 回答