【发布时间】:2020-08-17 04:11:23
【问题描述】:
出于延迟性能原因,我试图避免0 CORS 对授权 GET 请求的预检请求。简单的方法是将访问令牌放入 URL 查询参数中,但这是一种糟糕的安全做法1。
根据这个答案2,浏览器的目标是阻止使用 HTML 标记(如 img 或 script)无法完成的任何事情。但如果是这样,为什么允许设置像Accept或Content-Langage这样的标题?您不能在 img 标签上设置它们。此外,是什么阻止我将访问令牌隐藏在 Accept 标头中,如下所示:
Accept: */*, x-access-token/<access_token>
在这种情况下,浏览器政策似乎没有增加额外的保护,并鼓励开发人员使用不安全的做法或讨厌的黑客行为。我错过了什么?
【问题讨论】:
-
img 标签解释过于简单了。实现级别的 CORS 策略是基于白名单的,它允许一组限制标头和其他一些东西。如果您有兴趣,可以搜索规范。但回到你的问题,为什么,因为它是白名单基础。
-
谢谢。但是,考虑到在 Accept 标头中放置任意数据是多么容易,它到底完成了什么?
-
这很简单,但是可以用这些任意数据做什么呢?不会造成任何伤害。
-
没有害处,但为了让浏览器开发人员的生活更轻松(并使您的工作更难),实现是基于白名单的。
-
至于 “为什么允许设置像
Accept或Content-Langage这样的标题? 这个问题的一部分,请参阅lists.w3.org/Archives/Public/public-webappsec/2013Aug/… 的讨论。 “由于插件,接受是相当随机的。 Accept-Language 和 Content-Language 我想我们认为足够安全。不确定有什么特别有力的理由” 和 “最后,它看起来有些武断,因为它反映了过去 15 年 Web 平台发展的变幻莫测。”
标签: javascript html http security cors