您不能使用Origin
标头可靠地限制用户脚本对您的 API 的访问。
默认情况下,GM_xmlhttpRequest()
Doc根本不发送Origin
标头。也不会GM_xmlhttpRequest
阻止跨站点请求;这是存在的主要原因GM_xmlhttpRequest
。
此外,对于Greasemonkey (Firefox) 和Tampermonkey (Chrome),默认情况下GM_xmlhttpRequest
不发送标头。referer
但是,可以将两个 标题都覆盖为脚本编写者想要的任何内容。
这是一个欺骗两个标头的演示脚本(使用数据包嗅探器自己查看):
// ==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 用户脚本对脚本开发者来说不是那么友好。原生 Chrome 用户脚本从不发送Origin
标头,总是将当前页面作为referer
.
如果您尝试欺骗这些标头中的任何一个,控制台将显示如下错误:
拒绝设置不安全的标头“referer”
拒绝设置不安全的标头“origin”
这是为您的 Chrome 用户脚本使用 Tampermonkey 的另一个原因。