gpt4 book ai didi

javascript - GM_xmlhttpRequest 发送什么 HTTP 来源?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:43 26 4
gpt4 key购买 nike

我希望我的带有 REST API 的应用能够以不同的方式访问:

  • 来自同一域(此处使用普通 AJAX 请求)
  • 通过站点所有者 (CORS) 附加的脚本从另一个域
  • 通过用户脚本从另一个域 (GM_xmlhttpRequest (?))

我想将我的应用程序的网站列表限制在白名单中。

我知道如何使用 CORS,但我不确定它是否以与 GM_xmlhttpRequest 相同的方式工作,因为 GM_xmlhttpRequest 不需要 Origin 要从服务器发回的 header 。

我不关心客户端,但我仍然需要检查从哪个站点发送请求的服务器,如果是,则用 {response:"site not supported"} 之类的东西回答不在白名单中。

那么,当我在某个网页上运行用户脚本并发出 GM_xmlhttpRequest 时,服务器可以检测到来源吗?

最佳答案

您不能使用 Origin header 来可靠地限制用户脚本对您的 API 的访问。

默认情况下,GM_xmlhttpRequest()Doc根本不发送 Origin header 。 GM_xmlhttpRequest 也不会阻止跨站点请求;这就是 GM_xmlhttpRequest 存在的主要原因。

此外,对于 Greasemonkey (Firefox) 和 Tampermonkey (Chrome)GM_xmlhttpRequest 不会发送 referer header ,默认。

但是,这两个 header 都可以被覆盖以成为脚本作者想要的任何内容。

这是一个欺骗两个 header 的演示脚本(使用数据包嗅探器亲自查看):

// ==UserScript==
// @name _Test Fake Referrer
// @include http://stackoverflow.com/questions/18178934/*
// @grant GM_xmlhttpRequest
// ==/UserScript==

GM_xmlhttpRequest ( {
method: "GET",
url: "http://www.google.com",
headers: {
referer: "http://microsoft.com",
origin: "http://microsoft.com"
}
} );



普通的 Chrome 用户脚本 对脚本开发者来说不是那么好。 native Chrome 用户脚本从不发送 Origin header ,并且始终将当前页面作为 referer 发送。

如果您尝试欺骗这些 header 中的任何一个,控制台将显示如下错误:

Refused to set unsafe header "referer"
Refused to set unsafe header "origin"

这是为您的 Chrome 用户脚本使用 Tampermonkey 的另一个原因。

关于javascript - GM_xmlhttpRequest 发送什么 HTTP 来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178934/

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