Django报”DisallowedRedirect “的原因以及解决办法

Django 报 "DisallowedRedirect " 的原因是因为默认情况下,Django 不允许重定向到外部网站或非安全页面。这是出于安全考虑而设置的限制,以保护应用程序和用户免受恶意重定向攻击。

解决方法如下:

  1. 检查重定向 URL 是否安全。重定向目标必须是 HTTPS 和域名验证的,而不是 HTTP 链接或 IP 地址。否则,Django将会拒绝重定向。

  2. 在重定向 URL 中,指定完整的域名,包括协议。所以,不建议使用相对路径进行重定向。如:

    return redirect('/login/')

    可以改为:

    return redirect('https://www.example.com/login/')

  3. 如果必须重定向到外部网站,请使用 redirect() 的第一个参数中的跨站点请求伪造保护 (CSRF) 标记。如:

    from django.urls import reverse
    from django.shortcuts import redirect
    
    def my_view(request):
       # ...
       return redirect('https://www.example.com', csrf_token=request.csrf_token)
  4. 在 settings.py 中,将 ALLOWED_HOSTS 设置为应用程序期望请求的域名列表。如:
    ALLOWED_HOSTS = ['example.com', 'www.example.com']

    建议不要使用 * 通配符,因为这会打开所有的安全漏洞,使应用程序容易受到恶意攻击。

通过以上处理,即可成功避免 Django DisallowedRedirect 错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django报”DisallowedRedirect “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月14日
下一篇 2023年3月14日

相关文章

合作推广
合作推广
分享本页
返回顶部