Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]
Posted
技术标签:
【中文标题】Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]【英文标题】:Django CORS ORIGIN WHITELIST and ALLOWED_HOST not filtering anything [duplicate] 【发布时间】:2020-01-02 19:37:59 【问题描述】:我正在尝试在同一个VPS
上部署一个 Django 应用程序(制作 REST APIs)和一个 React 应用程序(使用我的 APIs)。
我正在为 Django 设置 CORS
,我仍然可以将我的 API 与邮递员一起使用,因为我不应该使用我的 API,因为我只允许我的 VPS IP and localhost
。
我已经尝试过
ALLOWED_HOSTS = ["\*"]
和 CORS_ORIGIN_ALLOW_ALL = True
一切顺利,我可以在任何地方使用我的 API
但是现在当我用我的allowed hosts
替换"\*"
并将cors origin 设置为False
时,一切都没有改变。
我尝试从allowed hosts
和白名单中添加remove/set http
,但没有任何改变。
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = ["MYIP","127.0.0.1"]
ALLOWED_HOSTS = ["MYIP"]
我使用 python 3.6、django 2.2 和 react 16.8。 感谢您的帮助
【问题讨论】:
您是否将DEBUG
设置为false?
CORS 是用于浏览器的标头。它们保护网络浏览器的用户。 CORS 并不是为了保护您的 API 免受不必要的访问。您需要为此使用其他方法。
像这样测试你的 CORS 标头:在另一个网站上嵌入一个调用你的 API 的脚本(例如,在你的机器上给你的本地主机另一个名字并在那里打开它)。然后尝试运行脚本。您会看到您的脚本从您的站点获取 OPTIONS,然后在您的浏览器中出现错误。但你永远不会在 postman 或 curl 中看到这一点。
【参考方案1】:
您不能使用 Postman 或 curl(在任何其他直接 HTTP 请求方法上)来测试 CORS。 CORS 旨在告诉网络浏览器(并且仅限网络浏览器)它们应该允许从网页中访问哪些资源。
这个想法是为了防止带有恶意站点.com 的人诱使用户访问该站点以从您的服务器(例如 iframe)获取资源,以便用户认为他们在您的网站实际上不是。
因此,您只能通过运行一个脚本来测试它,该脚本从不同域的网页中的 API 获取数据(从浏览器中)。
CORS 并不是为了让您的网站完全阻止访问。任何使用 curl(或邮递员)的机器仍然可以访问您的 API。
【讨论】:
这更有意义谢谢!因此,为了保护我的 API,令牌身份验证(具有生命周期)是否足够?以上是关于Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Django CORS 拒绝访问,即使我设置了 CORS_ORIGIN_ALLOW_ALL = True
尽管将 AWS 静态文件路径添加到 CORS_ORIGIN_WHITELIST django-cors-headers,但出现 403 错误
Django CORS ORIGIN WHITELIST 和 ALLOWED_HOST 没有过滤任何东西[重复]