在Chrome中禁用同源策略

2131

1
请参阅http://peter.sh/experiments/chromium-command-line-switches/,我不确定其真实性,但它似乎是由自动化过程生成的集合。 - CSSian
2
chromium.org链接到peter.sh页面,因此应该相当可靠。 - Benjineer
4
请注意,即使仅用于开发,禁用同源策略也是危险的。当您以此方式启动浏览器时,您可能不仅会打开应用程序,还会检查邮件、阅读Stack Overflow等。考虑使用更好的替代方案,例如Web代理,以解决这些问题。例如通过proxrox:https://github.com/bripkens/proxrox - TommyMason
38
自版本49开始,使用此选项--disable-web-security --user-data-dir - vanduc1102
3
对于任何想在开发环境中使用grunt运行服务器的人,可以参考这个链接获取相关建议:https://gist.github.com/Vp3n/5340891 - GrayedFox
显示剩余10条评论
38个回答

1265

关闭Chrome(或Chromium),并使用--disable-web-security参数重新启动。我刚刚测试了一下,并验证了我可以访问一个嵌入在从“localhost”提供的页面中的src =“http://google.com”的iframe的内容(在Ubuntu下测试过)。对于我来说,确切的命令是:

注意:运行命令前请关闭所有Chrome实例

chromium-browser --disable-web-security --user-data-dir="[some directory here]"

当浏览器首次打开时,它会警告您“正在使用不受支持的命令行”,您可以忽略此警告。
来自chromium源代码:
// Don't enforce the same-origin policy. (Used by people testing their sites.)
const wchar_t kDisableWebSecurity[] = L"disable-web-security";

在 Chrome 48 之前,您可以直接使用以下代码:
chromium-browser --disable-web-security

1
确保在Windows上存在该目录。在您的个人Users[user]\文件夹中创建一个。 - Dmitri R117
8
截至目前Chrome的最新版本(例如我的版本是92),需要使用“--disable-web-security”,但这还不够。还需要使用“--disable-site-isolation-trials”。请参考下面@user2576266提供的较新答案。(请注意,Chrome仍会显示警告,指出它不理解“--disable-site-isolation-trials”选项,但实际上它可以正常工作。) - Sprimesson
1
@AliNakisaee 我的版本是95,但“--disable-site-isolation-trials”不起作用。 - marek8623
5
对于Chrome 96版本,请使用"C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --disable-gpu --disable-features=IsolateOrigins,site-per-process --user-data-dir =“C:// ChromeDev”,只需添加--disable-features = IsolateOrigins,site-per-process请参见此处 - mahmoud nezar sarhan

1196

好的。对于OSX系统,请打开终端并运行以下命令:

$ open -a Google\ Chrome --args --disable-web-security --user-data-dir

在Mac上Chrome 49+需要使用--user-data-dir参数

对于Linux,请运行:

$ google-chrome --disable-web-security

此外,如果您想访问本地文件以进行开发,例如 AJAX 或 JSON,您也可以使用此标志。

--allow-file-access-from-files

对于Windows系统,打开命令提示符并进入Chrome.exe所在的文件夹,然后输入以下命令:

chrome.exe --disable-web-security

这应该会禁用同源策略,使您可以访问本地文件。

更新:对于 Chrome 22+,您将收到一个错误消息,其中说:

您正在使用不受支持的命令行标志:--disable-web-security。稳定性和安全性将会受到影响。

但是在开发过程中,您可以忽略该消息。


28
为了使其正常工作(Chrome 88.0 ...),我必须在“--user-data-dir”之后添加一个路径,例如:“--user-data-dir="tmp"”。 - Ryan H.
Chrome 89.0 - 我还必须添加 --user-data-dir="[PATH]",否则它将无法工作。 - Shimi Shimson
3
如果您想要找到现有的用户目录,在MacOS上,您可以在以下位置找到它:--user-data-dir="/Users/<YOUR_USER>/Library/ApplicationSupport/Google/Chrome"。在终端中键入whoamipwd -P以查找您的用户名。 - FooBar
C:\Program Files\Google\Chrome\Application - 这是截至 2021 年 07 月在 Windows 上 Chrome 的默认安装路径。 - Consta Gorgan
你需要指定两个路径,一个是chrome.exe的路径,另一个是数据目录,chrome将在其中存储数据。确保数据目录具有写入权限。路径为:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"。 - ANIK ISLAM SHOJIB

664

对于Windows用户:

我认为这里所接受的解决方案存在问题,如果您已经打开Chrome并尝试运行chrome.exe --disable-web-security 命令,它将不起作用。

然而,在调研过程中,我看到了一个Super User上的帖子,如何同时运行启用和禁用Web安全性的Chrome?

基本上,您需要添加命令并像这样运行它(或者创建一个带有它的快捷方式,并通过它运行新的Chrome实例)。

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

使用此方法将同时打开一个新的“不安全”的Chrome实例,同时保持其他“安全”的浏览器实例正常工作。

这通过在C:下创建一个名为“Chrome dev session”的新文件夹/目录,并告诉这个新的Chrome实例使用该文件夹/目录来存储其用户和会话数据来实现。由于这一点,新实例与您的“普通”Chrome数据分离,您的书签和其他保存的数据将无法在此实例中使用。

注意:只有通过此方法打开的第一个“新”Chrome实例受到影响,因此只有第一个新Chrome窗口中的第一个选项卡受到影响。 如果关闭该实例,则可以再次使用相同的命令,例如任何书签都会指向相同的文件夹,因此仍然存在于本地应用程序或类似应用中。

如果要运行多个“不安全”的实例,则每个实例都需要自己的文件夹/目录,因此您需要再次运行命令并使用不同的文件夹名称。但是,这也意味着每个不安全的实例都将与其他实例分开,因此任何书签或其他保存的用户或会话数据都不能跨实例使用。


这对我有用,但为什么似乎没有任何文档记录呢? - GDavoli
我不确定,但可能是因为总的来说,Google/Chrome可能不希望您禁用安全性。 - Ola Karlsson
1
不适用于最新版本的Chrome浏览器。https://i.imgur.com/VhFiecY.png - Alexandre Daubricourt
哇塞,谢谢您先生。天啊,Chrome 有一个开发者模式,真是太好了。 - Christian Matthew
最新版本的Chrome完美运行。 - Rémy Esmery

415

对于Windows

  1. 打开开始菜单

  2. 键入windows+R 或 打开“运行”

  3. 执行以下命令:

  4.  chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security
    

对于 Mac

  1. 进入终端

  2. 执行以下命令:

 open /Applications/Google\ Chrome.app --args --user-data-dir="/var/tmp/Chrome dev session" --disable-web-security

应该会弹出一个新的 Chrome 浏览器窗口,显示以下消息:

图片描述

对于Mac

如果你想要打开已经禁用网络安全性的 Chrome 浏览器的新实例而不关闭现有标签页,请使用下面的命令。

open -na Google\ Chrome --args --user-data-dir=/tmp/temporary-chrome-profile-dir --disable-web-security

它将打开一个新的 Chrome 浏览器实例,如下所示,且 Web 安全性被禁用:

在此输入图片描述


2
这是一个很棒的答案,帮助我在MAC上启动第二个窗口并禁用网络安全。2022/12 - Jindřich Širůček
很高兴知道它对您有所帮助@JindřichŠirůček - Gauri Bhosle

197
使用当前最新的Chrome版本118.0.5993.89(官方版本)(64位)。
Windows:点击开始按钮,然后复制粘贴以下内容(将D:\temp更改为您喜欢的位置)。
chrome.exe  --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"

Linux: 打开终端,然后运行以下命令(将~/tmp目录更改为您喜欢的目录)
google-chrome --disable-site-isolation-trials --disable-web-security --user-data-dir="~/tmp"

注意:此解决方案将在一个隔离的沙盒中启动Chrome,并不会影响主要的Chrome配置文件。

13
这是唯一适用于我的解决方案。我在 Windows 10 上的“运行”窗口中运行了这个命令:chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"。非常感谢。 - Sampath
4
在我的情况下,添加 --disable-site-isolation-trials 对我很有帮助,使用的是 Chrome v75.0、Selenium Web Driver 和 Java。谢谢! - Nikolay Chernov
3
这段话的意思是:在Linux系统中,通过稍作修改,可以使用以下命令google-chrome --disable-site-isolation-trials --disable-web-security --user-data-dir="/tmp" - Serhii Popov
2
我有95版本,但添加--disable-site-isolation-trials不起作用。 有什么解决方法吗? - marek8623
1
正如预期的那样,它也可以与chromium一起使用。 - Jannis Ioannou
显示剩余12条评论

99

针对使用Windows的Chrome浏览器用户,版本号在60.0.3112.78(测试时可行的日期)及至少到今天2022年11月24日为止的(ver. 106.0.5249.119 (Official Build) (64-bit))。您不需要关闭任何Chrome实例。

  1. 在桌面上创建一个快捷方式
  2. 右键单击快捷方式,然后单击“属性”
  3. 编辑目标属性
  4. 将其设置为"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:/ChromeDevSession"
  5. 启动Chrome并忽略显示“--disable-web-security不受支持”的消息!

请注意,不要使用此特定的浏览器实例进行浏览,因为它可能会被黑客攻击!


你还能在源代码上使用Chrome调试吗? - Righto
刚刚测试过,您仍然可以在此模式下使用开发工具。 - KuN
这个解决方案在 Chrome 版本 71 中仍然有效。非常感谢! - Jessica
1
这个方法仍然有效:版本106.0.5249.119(官方构建)(64位) - verism
1
基本上,只要禁用Web安全性,任何网站都可以像您一样向另一个站点发出请求。假设您访问hack3rs-site.com,该站点向facebook.com发出帖子请求,通常情况下,由于CORS的阻止,该请求将被阻止。但是,通过禁用此安全性,请求将通过,并且如果您已经进行了身份验证,则该请求将使用您现有的cookie。 - Tofandel
显示剩余4条评论

78

EDIT 3: 看起来这个扩展程序已经不存在了... 最近,我通常使用另一个具有独立目录的Chrome版本或者使用Firefox并安装https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/ 来解决CORS问题。

EDIT 2: 我无法再稳定地使用它了。

EDIT: 我最近试用了这个工具,但它停止工作了。卸载并重新安装该扩展程序可以修复它(重置默认设置)。

原始回答:

由于我在开发时还在浏览网页,所以不想重启Chrome并禁用Web安全性,后来发现了这个Chrome扩展。

Chrome Web Store Allow-Control-Allow-Origin: *
(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en)

基本上,它是一个小型切换开关,用于切换允许或禁止访问控制。对于我正在做的工作来说,它非常完美。


1
我该如何实现并集成我的扩展,因为我的扩展需要访问跨域。我不能强制用户使用disable-web-security打开浏览器。 - codebased
1
很遗憾,此扩展无法用于本地文件。在这种情况下,请坚持使用“--disable-web-security”开关。 - bryc
2
@bryc 它并不是真的意味着这样做。但请考虑,您可以使用 --allow-file-access-from-files 而不是禁用所有网络安全性。 - Cobertos
1
警告!一些网站无法允许你启用此扩展登录!例如Firebase控制台。 - campsjos
2
“该扩展已不存在” 你能删除你的回答或者至少在顶部加粗标注“编辑3”吗? - Michael Freidgeim
显示剩余3条评论

63

在Mac终端上尝试这个命令-

open -n -a "Google Chrome" --args --user-data-dir=/tmp/temp_chrome_user_data_dir http://localhost:8100/ --disable-web-security 

它会打开另一个禁用安全性的Chrome实例,这样就不会再有CORS问题了。此外,您不再需要关闭其他Chrome实例。将本地主机URL更改为您自己的URL。


以上大多数命令行答案在我的 macOS 上没有改进。然而,这篇文章 https://alfilatov.com/posts/run-chrome-without-cors/ 和命令行 open 对我有用。它与上面的命令相同,因此投票支持。 - Max MacLeod
这在2023年的Chrome 119.0.6045.159(官方版本)(64位)上对我有效,在Debian 12上也是如此。唯一的区别是,我需要去掉open -n -a并将"Google Chrome"改为google-chrome,像这样:google-chrome --user-data-dir=/tmp/temp_chrome_user_data_dir http://localhost:8100/ --disable-web-security。我只是添加了一个“&”符号和输出重定向到/dev/null,但还是要感谢您。 - undefined

57
似乎以上解决方案都没有实际作用。在最近的Chrome版本中,--disable-web-security已不再支持。 Allow-Control-Allow-Origin: * - chrome extension 部分解决了问题。它仅适用于使用GET方法且没有自定义HTTP标头的请求。否则,Chrome将发送OPTIONS HTTP请求作为预检请求。如果服务器不支持CORS,则会响应404 HTTP状态码。插件无法修改响应的HTTP状态码。因此,Chrome将拒绝此请求。根据当前的Chrome扩展API,Chrome插件无法修改响应的HTTP状态码。而且,您也不能对XHR发起的请求进行重定向。
不确定为什么Chrome让开发人员的生活变得如此困难。它阻止所有可能禁用XSS安全检查的方式,即使是用于开发的也完全没有必要。
经过多日的奋斗和研究,有一个解决方案完美地解决了我的问题:使用corsproxy。你有两个选择: 1.使用[https://cors-anywhere.herokuapp.com/] 2.在本地安装corsproxy:npm install -g corsproxy

[2018年6月23日更新] 我最近正在开发一个需要再次使用corsproxy的SPA应用程序。但似乎在github上没有一个corsproxy能够满足我的要求。

  • 出于安全原因,需要在防火墙内运行。所以我不能使用https://cors-anywhere.herokuapp.com/
  • 它必须支持https,因为chrome将会阻止在https页面中进行非https ajax请求。
  • 我需要在nodejs上运行。我不想维护另一种语言堆栈。

因此,我决定使用nodejs开发自己的版本corsproxy。实际上非常简单。我已经将它发布在github上作为一个gist。这里是源代码gist: https://gist.github.com/jianwu/8e76eaec95d9b1300c59596fbfc21b10

  • 这是纯Node.js代码,没有任何其他依赖项
  • 您可以在http和https模式下运行(通过在命令行中传递https端口号),要运行https,您需要生成证书和密钥并将它们放在webroot目录中。
  • 它还充当静态文件服务器
  • 它也支持预检测选项请求。

要启动CORSProxy服务器(http端口8080): node static_server.js 8080

访问代理: http://host:8080/http://www.somesite.com


如果你要这样做,你可以在本地或远程主机上托管一个Web服务器,从所需的网页中提取内容,然后设置正确的CORS标头。 - Cobertos
我之前就考虑过这种方法。但是这需要一些编码,特别是在我的情况下,我需要调用几个来自不同域的服务。因此,我必须将不同的URL模式映射到不同的域。这正是corsproxy为我们所做的。而且它运行得非常完美。 - Jianwu Chen
4
不正确。接受答案中提到的方法对我有效。正如它所述,Chrome 49及以上版本使用命令“chrome.exe --disable-web-security --user-data-dir”对我有用。 - Gaurang Patel
2
Chromium 53,--disable-web-security --user-data-dir 对我没用。 - Dark Star1
4
在53+版本中,您需要提供一个独特的用户数据目录,与您正常的目录不同。这将为不安全的环境创建一个新的配置文件。--user-data-dir需要被设置为某个值,例如在Olas上面的答案中所述。如果您真的想这样做,您可以将其设置为实际的正常用户配置文件文件夹,但这是强烈不建议的,因为如果您在该模式下开始进行正常浏览,它会使您的正常配置文件容易受到意外攻击。 - lassombra
显示剩余5条评论

55

我发现最好的方法是在您的Windows桌面上复制Chrome或Chrome Canary快捷方式。将此快捷方式重命名为“NO CORS”,然后编辑该快捷方式的属性。

在目标中添加--disable-web-security --user-data-dir="D:/Chrome"到目标路径的末尾。

您的目标应该看起来像这样:

更新:新增了新的标志。

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="D:/Chrome"

输入图像描述


现在它只是给我404,而不是预检错误。 - L1ghtk3ira
404错误将是一个与服务器有关而不是Google Chrome的错误。 - etoxin
2
@etoxin 这个答案在最新版本的Chrome中已经无效了。你需要加上 --disable-web-security --user-data-dir="D:/Chrome"。 - Vignesh S
在最新的Chrome浏览器中(版本119.0.6045.160(官方版本)(64位)),对我来说是有效的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接