您如何处理作为 url 参数发送到 django 的 csrf 凭据?
我问是因为这显然是通过 iFrame 中的表单提交文件上传的唯一方法。
大多数在线示例显示将 csrf 凭据作为标头传递,
xhr.setRequestHeader("X-CSRFToken", csrfToken );
但这不是 ie/opera 中 iFrame 传输的选项。
我可以使用csrf_exempt
,但这会使我的网站容易受到攻击。
您如何处理作为 url 参数发送到 django 的 csrf 凭据?
我问是因为这显然是通过 iFrame 中的表单提交文件上传的唯一方法。
大多数在线示例显示将 csrf 凭据作为标头传递,
xhr.setRequestHeader("X-CSRFToken", csrfToken );
但这不是 ie/opera 中 iFrame 传输的选项。
我可以使用csrf_exempt
,但这会使我的网站容易受到攻击。
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