繁体   English   中英

带有下载 api 请求的视图的 CSRF 保护

[英]CSRF protection to a view with a download api request

我在我的应用程序中有这个视图,它调用 api 来下载 pdf:

@login_required
def generateContractPdf(request):
   file_id = request.POST.get('contract')  
   contract_id = request.POST.get('contract')    
   payload = {"file_id": file_id}
   data = {"data": json.dumps(payload, default=str)}
   headers = {'content-type': 'application/json'}
   brokkr = os.environ.get("BROKKR_ADDRESS", default='localhost')
   response = requests.post('http://'+brokkr+':5000/contract', params=data, headers=headers)

   filename=str(contract_id)+".pdf"
   response = HttpResponse(response.content, content_type='application/pdf')
   response['Content-Disposition'] = 'attachment; filename="'+filename+'"'

   return response

但我刚刚意识到,如果我不使用 render(),csrf 将不起作用,因此可以利用此视图。

我怎样才能改变它以保持这种保护?

您可以将csrf_protect装饰器应用于您的视图,以保护 CsrfViewMiddleware 到视图。

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def generateContractPdf(request):
    --- Your logic ---

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM