我有一个网站正在运行,似乎工作正常。然而,现在我第一次在日志中看到了这个错误。
Forbidden (Referer checking failed - no Referer.): /pointlocations/
[pid: 4143|app: 0|req: 148/295] 104.176.70.209 () {48 vars in 1043 bytes} [Wed Jul 26 19:49:35 2017] POST /pointlocations/?participant=A2TYLR23CHRULH&assignmentId=3P4MQ7TPPYF65ANAUBF8A3B38A0BB6 => generated 2737 bytes in 2 msecs (HTTP/1.1 403) 1 headers in 51 bytes (1 switches on core 0)
发布到/pointlocations/
时会发生这种情况,但只针对一个特定的人(每个帐户每个participant
都是唯一的,所以我知道它只有一个人,反复出现这个问题。其他500多个participant
没有这样的问题/错误。
这个错误意味着什么,可能导致它的原因,我能解决这个问题吗?
答案 0 :(得分:10)
TLDR:尝试使用csrf_exempt装饰器进行观看:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_webhook(request):
# Do some stuffs...
# Return an HHTPResponse as Django expects a response from the view
return HttpResponse(status=200)
只有在绝对需要时才应该这样做,以避免潜在的安全漏洞。
更多背景信息:
我在处理由第三方调用的Web挂钩时遇到了类似的问题,这是一种支付解决方案。每次付款状态发生变化时,第三方都会调用该网络挂钩的Django视图通知我们(例如,从“打开”到“付费”)。
由于支付平台仅在请求POST中提供支付ID,因此不应执行CSRF检查。 Django允许您通过csrf_exempt
装饰器完成此操作。