【问题标题】:django alternative to prevent header poisondjango 替代方案以防止标头中毒
【发布时间】:2020-11-03 02:27:57
【问题描述】:

首先我的英语说得不太好,但无论如何......

我知道我需要使用 allowed_hosts,但我需要使用所有“*”,并且标头攻击可能会导致以下情况:

<script src = "mysite.com/js/script.js"> <script>

<script src = "attacker.com/js/script.js"> <script>

mysite.com/new_password=blabla&token=blabla8b10918gd91d1b0i1

attacker.com/new_password=blabla&token=blabla8b10918gd91d1b0i1

但是所有静态文件都加载在nodejs服务器“cdn.mysite.com”上,并且所有域都在数据库中,所以我总是从数据库中获取域来与请求头进行比较,并使用来自向客户端发送任何内容的数据数据库:

views.py:

def Index(request):

    url = request.META['HTTP_HOST']

    cf = Config.objects.first()

    if cf.domain == url:

        form = regForm()

        return render(request, 'page/site/home.html', {'form': form})

    elif cf.user_domain == url:

        ur = request.user.is_authenticated

        if ur:
    
            config = {'data' : request.user}

            lojas  = 'json.loads(request.user.user_themes)'

            return render(request, 'app/home.html', {"config":config, "lojas":lojas})

        else:

            forml = loginForm()

            return render(request, 'page/users/login/login.html', {'form':forml})

    else:
        redirect("//" + cf.domain)

这样使用还会不安全吗?

【问题讨论】:

    标签: python django security content-security-policy


    【解决方案1】:

    您不需要创建一个自行车棚。 allowed_hosts 设置完全足以防止在请求中欺骗主机名(您可以在Practical HTTP Host header attacks 中看到主机名欺骗的工作原理)。

    allowed_hosts 表示 [YourSite.com, www.YourSite.com, *.YourSite.com] 的域类型 - 这是您的站点应该在其上运行的域名(而不是您的站点可以从中加载外部脚本的域名)。

    并在服务器上使用 HTTP/2 而不是 HTTP/1.1,因为:

    根据 HTTP/1.1 协议规范,当指定一个 资源的绝对路径,Host 标头值ignored,并且 资源路径中的主机 被视为它。这导致了一个事实 在这种情况下,即使是安全配置的 Web 服务器也接受 带有欺骗主机值的请求,以及使用 HOST 而不是 SERVER_NAME 容易受到这种攻击。

    因此,如果您确实使用了 SERVER_NAME - 这种攻击不会影响您。

    如果您希望控制公共 CDN 上可能的脚本欺骗 - 使用:

    【讨论】:

    • 但在我的情况下,域的变化是动态的,任何时候都必须有用户添加的新域,所以它必须是自动的,可以支持数千个域跨度>
    • 如果有数千个域 - 最好通过数据库管理这些域,这样就可以了。只需验证 HOST/SERVER_NAME(HTTP 标头中的 Host: 字段)是否存在于数据库中,您将避免这种欺骗。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2012-05-17
    • 2011-07-21
    • 2016-08-23
    • 2011-06-20
    相关资源
    最近更新 更多