首先我英语说得不太好,但无论如何。。。
我知道我需要使用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
至
攻击者.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)
这样用还会不安全吗?
您不需要创建一个自行车棚。allowed_hosts
设置完全足以防止伪造请求中的主机名(您可以在实用的HTTP主机头攻击中看到伪造主机名的工作原理(。
allowed_hosts
是指[YourSite.com,www.YourSitecom,*.YourSite.com]类型的域名——这是您的网站应该运行的域名(而不是您的网站可以加载外部脚本的域名(。
并且在服务器上使用HTTP/2而不是HTTP/1.1,因为:
根据HTTP/1.1协议规范,当指定资源的绝对路径,主机标头值被忽略,并且资源路径中的主机被作为它。这导致了以下事实在这种情况下,即使是安全配置的web服务器也接受具有伪造的Host值的请求,以及使用HOST而不是SERVER_NAME易受此攻击。
因此,如果您确实使用SERVER_NAME,这种攻击不会影响您。
如果您希望控制公共CDN上可能存在的脚本欺骗,请使用:
- 内容安全策略HTTP标头(您可以选择要读取的语言(
- 子资源完整性(Safari 12中支持的Safari当前不支持
(