XSRF 和 SOP,具有明显相似请求的不同结果

XSRF and SOP, different outcome with apparently similar requests

我正在尝试了解更多有关 XSRF 以及 SOP 的信息,我阅读了很多书并且我或多或少清楚地知道什么应该发生,什么不应该发生,但我无法弄清楚为什么我在以两种不同的方式执行相同的事情(我假设)时获得不同的结果。

可能类似问题的相同基本场景,goodsite.combadsite.com; badsite 想使用用户的 cookie 在 goodsite.com 上发出 GET 请求。 我能够以几种不同的方式完成这项工作,一个带有 onload 发送的表单,一个带有 onclick 功能的按钮,它们都正常工作,发出查询(而且由于 SOP,我看不到响应) .

但是我不明白为什么这不起作用

xhReq = new XMLHttpRequest();
xhReq.open("GET", "https://goodsite.com/doStuff");
xhReq.withCredentials=true;
xhReq.send();

此代码与所有其他可用解决方案相同settings/parameters,但由于此错误而被我的浏览器阻止。

Access to XMLHttpRequest at 'https://goodsite.com/doStuff' from origin 'https://badguy.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我错过了什么?谢谢

是 javascript CORS 策略。服务器发送 header 告诉浏览器“嘿,我不希望我的白名单之外的任何人使用 javascript 向我发送请求”。

是一种安全机制,可以避免读取请求 cookie headers 等

您可以使用服务器避免它。网上有一些像https://cors-anywhere.herokuapp.com/ 如果您正在获取一些跨源内容,只需将 url 添加到此 link。

扩展:https://portswigger.net/web-security/cors