gpt4 book ai didi

security - ALLOWED_HOSTS 正在防御什么漏洞?

转载 作者:行者123 更新时间:2023-12-02 19:30:11 25 4
gpt4 key购买 nike

该示例来自 Python Django 框架,但适用于所有 Web 应用程序。 ALLOWED_HOSTS setting如何保护您的网站和用户,即如果ALLOWED_HOSTS设置为"*",恶意用户将如何“毒害带有恶意主机链接的缓存和密码重置电子邮件”?

ALLOWED_HOSTS Default: [] (Empty list)

A list of strings representing the host/domain names that this Django site can serve. This is a security measure to prevent an attacker from poisoning caches and password reset emails with links to malicious hosts by submitting requests with a fake HTTP Host header, which is possible even under many seemingly-safe web server configurations.

Values in this list can be fully qualified names (e.g. 'www.example.com'), in which case they will be matched against the request’s Host header exactly (case-insensitive, not including port). A value beginning with a period can be used as a subdomain wildcard: '.example.com' will match example.com, www.example.com, and any other subdomain of example.com. A value of '*' will match anything; in this case you are responsible to provide your own validation of the Host header (perhaps in a middleware; if so this middleware must be listed first in MIDDLEWARE_CLASSES).

最佳答案

how would a malicious user go about "poisoning caches and password reset emails with links to malicious hosts"?

缓存系统应该缓存通过特定host header发送的请求的响应。以便识别 URL。例如,如果有一个对 /foo 的 GET 请求,缓存只会在检查了主机 header (而不是简单的目标 IP)。如果输出页面包含反射的主机名和主机,则将 ALLOWED_HOSTS 设置保留为 "*" 您将允许此缓存被垃圾填满(即中毒) header 由缓存层或服务器检查。

例如如果您网站上的页面输出

<script src="//[hostname]/script.js"></script>

如果攻击者将 attacker-site.co.uk 指向您的服务器并请求该页面,您的服务器将响应:

<script src="//attacker-site.co.uk/script.js"></script>

因此,用户和您的网站 (example.com) 之间的任何缓存层(例如 CDN)都会对受到先前注入(inject)的主机 header 污染的页面产生合法请求:

<script src="//attacker-site.co.uk/script.js"></script>

这使得攻击者可以在您的域上运行恶意 JavaScript,从而破坏同源策略。例如,他们可能安装了一个 JavaScript 键盘记录器来获取密码,或者安装了一个脚本来发送 DOM 内容。

此外,如果主机名未正确输出编码,则即使页面上不存在外部 JavaScript 标签,也可以直接使用它来注入(inject)脚本。

" /><script>alert('xss')</script>

将渲染:

<img src="//[hostname]/img.jpg" />

作为

<img src="//" /><script>alert('xss')</script>/img.jpg" />

密码重置电子邮件是类似的概念。假设密码重置电子邮件的模板是:

您请求重置密码。请前往 https://[HOST]/reset?token=[TOKEN] 进行重置。

攻击者将其域名 www.evil.com 指向您的服务器并请求用户重置。他们的 DNS 设置可以简单地为自己设置,使用主机文件。

然后用户将收到一封电子邮件,内容为

您请求重置密码。请访问 https://www.evil.com/reset?token=XYZ 进行重置。

单击链接后,由于 www.evil.com 的公共(public) DNS 指向攻击者的站点,攻击者将获得密码重置 token 并获得对该帐户的访问权限。

See this link有关此类攻击的更多详细信息。

关于security - ALLOWED_HOSTS 正在防御什么漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com