ChatGPT解决这个技术问题 Extra ChatGPT

在 Chrome 中禁用同源策略

有什么方法可以禁用 Google 的 Chrome 浏览器上的 Same-origin policy

另请参阅 peter.sh/experiments/chromium-command-line-switches,我不确定它的真实性,但它似乎是由自动化过程产生的集合
chromium.org 链接到 peter.sh 页面,因此必须非常合法。
请注意,禁用 SOP,即使仅用于开发,也是危险的。当您以这种方式启动浏览器时,您可能不仅要打开您的应用程序,还要检查您的邮件、阅读等等……考虑使用更好的替代方案,例如网络代理来解决这些问题。例如通过 proxrox:github.com/bripkens/proxrox
从版本 49 开始,使用此选项 --disable-web-security --user-data-dir
对于寻求如何在开发人员环境中使用 grunt 运行服务器执行此操作的建议的任何人,请参阅:gist.github.com/Vp3n/5340891

B
Brad

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

注意:在运行命令之前杀死所有 chrome 实例

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

浏览器首次打开时会警告您“您正在使用不受支持的命令行”,您可以忽略。

来自铬源:

// 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

确保该目录存在于 Windows 上。在您的个人 Users[user]\ 文件夹中创建一个。
对于最新版本的 chrome(例如,我有 92 版),“--disable-web-security”是必要的,但还不够。还需要使用“--disable-site-isolation-trials”。请参阅下面@user2576266 的最新答案。 (请注意,chrome 仍会显示“--disable-site-isolation-trials”不理解的警告。它确实有效。)
@AliNakisaee 我有 95 版,但“--disable-site-isolation-trials”不起作用。
对于 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-processSee this
L
Luis Lobo

是的。对于 OSX,打开终端并运行:

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

--user-data-dir required on Chrome 49+ on OSX

对于 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。稳定性和安全性将受到影响。

但是,您可以在开发时忽略该消息。


我必须在 --user-data-dir 之后添加一条路径,就像在 --user-data-dir="tmp" 中一样,它才能正常工作(Chrome 88.0...)
Chrome 89.0 - 我还必须添加 --user-data-dir="[PATH]",否则将无法正常工作
如果您想要现有的用户目录,在 MacOS 上,您可以在以下位置找到它:--user-data-dir="/Users/<YOUR_USER>/Library/ApplicationSupport/Google/Chrome"。在终端中输入 whoamipwd -P 以查找您的用户名。
C:\Program Files\Google\Chrome\Application - Windows 上 Chrome 的默认安装路径(截至 2021 年 7 月)。
您需要为 chrome.exe 指定 2 个路径,为 chrome 将存储的数据目录指定第二个路径,使 data-dir 具有写入权限“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” - -disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"
O
Ola Karlsson

对于 Windows 用户:

在我看来,这里接受的解决方案的问题是,如果您已经打开 Chrome 并尝试运行 chrome.exe --disable-web-security 命令,它将无法正常工作。

然而,在研究这个时,我发现了一个关于超级用户的帖子,Is it possible to run Chrome with and without web security at the same time?

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

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

这将在您保持其他“安全”浏览器实例打开并正常工作的同时打开一个新的“不安全”Chrome 实例。

这通过在 C: 下创建一个新的文件夹/目录“Chrome 开发会话”来工作,并告诉这个新的 Chrome 实例将该文件夹/目录用于其用户和会话数据。因此,新实例与您的“正常”Chrome 数据分离,您的书签和其他保存的数据在此实例中将不可用。

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

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


这对我有用,但是为什么这似乎没有记录在任何地方?
我不知道,但也许是因为一般来说,Google/Chrome 可能不希望您禁用安全性。
G
Gauri Bhosle

对于 Windows:

打开开始菜单 键入 windows+R 或打开“运行” 执行以下命令: chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security

对于 Mac:

转到终端执行以下命令: open /Applications/Google\ Chrome.app --args --user-data-dir="/var/tmp/Chrome dev session" --disable-web-security

一个新的禁用网络安全的 chrome 浏览器应该打开并显示以下消息:

https://i.stack.imgur.com/i6RZ5.png

对于 Mac

如果您想在不关闭现有选项卡的情况下打开禁用网络安全的 Chrome 浏览器的新实例,请使用以下命令

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

它将打开禁用网络安全的 Chrome 浏览器的新实例,如下所示

https://i.stack.imgur.com/3QxAi.png


u
user2576266

使用当前最新的 chrome 版本 103.0.5060.134 (Official Build) (64-bit)

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 配置文件。


这是唯一适合我的解决方案。我已在 Windows 10 的 run 窗口上运行此 chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"。非常感谢。
拉头发啊啊啊——好像没用了
在我的情况下,添加 --disable-site-isolation-trials 确实帮助了我,Chrome v 75.0,Selenium Web Driver,Java。谢谢!
它适用于我在 Linux 上,但稍作修改google-chrome --disable-site-isolation-trials --disable-web-security --user-data-dir="/tmp"
我有 95 版,但添加 --disable-site-isolation-trials 不起作用。有什么解决方法吗?
O
Ognyan Dimitrov

对于使用 Chrome 版本 60.0.3112.78(该解决方案经过测试和工作的那一天)以及至少到今天 19.01.2019(版本 71.0.3578.98)的 Windows 用户。您不需要关闭任何 chrome 实例。

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

请注意不要使用此特定的浏览器实例进行浏览,因为您可能会被它入侵!


像魅力一样工作。我不敢相信 Chrome 不允许开发人员在不启动新会话的情况下禁用此功能。不过至少他们有办法。
你还能在你的源代码上使用 chrome 调试吗?
刚刚测试过,这种模式下还是可以使用开发工具的。
从 chrome 版本 71 开始,此解决方案仍然有效,非常感谢!
适用于 72.0.3626.109。帮助很大!
C
Cobertos

编辑 3:似乎扩展程序不再存在... 通常为了绕过 CORS,这些天我set up another version of Chrome with a separate directory 或者我使用带有 https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/ 的 Firefox。

编辑 2:我不能再让它始终如一地工作。

编辑:前几天我尝试将另一个项目用于另一个项目,但它停止了工作。卸载并重新安装扩展修复它(重置默认值)。

原答案:

我不想重新启动 Chrome 并禁用我的网络安全(因为我在开发时正在浏览)并偶然发现了这个 Chrome 扩展。

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

基本上,它是一个用于打开和关闭 Allow-Access-Origin-Control 检查的小拨动开关。非常适合我正在做的事情。


当我的扩展需要访问跨域时,我如何实现并与我的扩展集成。我不能强制用户使用 disable-web-security 打开浏览器
不幸的是,此扩展不适用于本地文件。在这种情况下,请坚持使用 --disable-web-security 开关。
@bryc这不是真的。请考虑您可以使用 --allow-file-access-from-files 而不是禁用所有网络安全。
警告!某些网站不允许您在启用此扩展程序的情况下登录!例如,Firebase 控制台。
“扩展不再存在”您可以删除您的答案还是至少将 Edit 3 以粗体显示在顶部
J
Jianwu Chen

似乎上述解决方案都没有真正起作用。最近的 chrome 版本不再支持 --disable-web-security。

Allow-Control-Allow-Origin: * - chrome 扩展部分解决了这个问题。它仅在您的请求使用 GET 方法并且没有自定义 HTTP 标头时才有效。否则,chrome 会将 OPTIONS HTTP 请求作为飞行前请求发送。如果服务器不支持 CORS,它将返回 404 HTTP 状态码。插件无法修改响应 HTTP 状态码。所以chrome会拒绝这个请求。 chrome 插件无法根据当前的 chrome 扩展 API 修改响应 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 上。以下是源代码要点:https://gist.github.com/jianwu/8e76eaec95d9b1300c59596fbfc21b10

它是纯 nodejs 代码,没有任何额外的依赖项

您可以在 http 和 https 模式下运行(通过在命令行中传递 https 端口号),要运行 https,您需要生成 cert 和 key 并将它们放在 webroot 目录中。

它还用作静态文件服务器

它也支持飞行前的 OPTION 请求。

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

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


如果您要达到那个程度,您总是可以在本地或远程托管一个 Web 服务器,从您想要的网页中提取内容,然后在其上设置正确的 CORS 标头。
我以前也想过这条路线。但这需要一些编码,特别是在我的情况下,我需要调用来自不同域的几个服务。所以我必须将不同的 URL 模式映射到不同的域。这正是 corsproxy 为我们所做的。而且效果很好。
不正确..接受的答案中提到的方式对我有用..正如它所提到的,Chrome 49 及更高版本的命令'chrome.exe --disable-web-security --user-data-dir'对我有用..
Chromium 53,--disable-web-security --user-data-dir 对我不起作用
在 53+ 中,您需要实际提供一个不同于普通目录的唯一用户数据目录。这会为不安全的环境创建一个新的配置文件。 --user-data-dir 需要设置为等于某些东西,例如上面的 Olas 答案。如果您真的想要,您可以将其设置为与您实际的普通用户配置文件文件夹相同,但强烈建议不要这样做,因为如果您在该模式下开始正常浏览,它会使您的正常配置文件容易受到意外攻击。
M
Manikandan C

在 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 实例。将 localhost URL 更改为您的 URL。


上面的大多数命令行答案对我在 macOS 上没有任何改进。但是这篇文章 alfilatov.com/posts/run-chrome-without-cors 和打开的命令行对我有用。它与上面的命令相同,因此投票。
R
Ronnie Oosting

对于 Windows... 在您的桌面上创建一个 Chrome 快捷方式。右键单击>属性>快捷方式编辑“目标”路径:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --disable-web-security

(将“C:....\chrome.exe”更改为您的 chrome 所在的位置)。

等等瞧 :)


截至今天 20013 年 8 月 27 日,它对我有用,允许我在自己的本地主机上执行 Ajax。
在 Canary 版本 53 中得到“您正在使用不受支持的命令行标签:--disable-web-security”
@khoailang 你仍然可以使用这个开关。该警告是谷歌对不安全战争的一部分(一件好事)。此外,从 55+ 版本开始,您还需要使用 --user-data-dir=<此处的某个其他目录>,因此 Google 不希望您将不安全的规则与您的普通配置文件混为一谈。
谢谢,我忘记了我的 Chrome 不在路径中,这意味着我必须将它定向到它的文件夹。
e
etoxin

我发现最好的方法是在 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"

https://i.stack.imgur.com/PvMLm.png


这只是给我 404 现在而不是飞行前错误
404 错误将是与服务器相关的错误,而不是 Google Chrome 错误。
@etoxin 这个答案在最新版本的 chrome 中不再有效。您必须添加 --disable-web-security --user-data-dir="D:/Chrome"
S
Shadi Alnamrouti

创建快捷方式:

https://i.stack.imgur.com/7aXq7.png

粘贴命令:

cmd /c start chrome --disable-web-security --user-data-dir="c:\temp\chrome"

以管理员身份运行


H
HoldOffHunger

不要这样做! You're opening your accounts to attacks。一旦您这样做,任何第 3 方站点都可以开始向您登录的其他网站(即您登录的站点)发出请求。

而是运行本地服务器。就像打开 shell/终端/命令行并输入一样简单

cd path/to/files
python -m SimpleHTTPServer

然后将浏览器指向

http://localhost:8000

如果您发现它太慢consider this solution

更新

对这个答案投反对票的人应该在这里和downvote this one too保持一致。不知道为什么我的答案如此被否决,而 here 上的相同答案是投票最多的答案。

你正在向攻击敞开心扉。您通过 npm 远程或本地包含在您的站点上的每个第三方脚本现在都可以上传您的数据或窃取您的凭据。你正在做一些你不需要做的事情。建议的解决方案并不难,需要 30 秒,不会让你打开攻击。当更好的事情如此简单时,你为什么要选择让自己变得脆弱?

告诉人们禁用安全性就像告诉你的朋友让他们的前门没有上锁和/或把钥匙放在门垫下面。当然几率可能很低,但如果他们真的被盗,没有强行进入的证据,他们可能很难获得保险。同样,如果您禁用安全性,您只是在禁用安全性。当您可以在不禁用安全性的情况下如此简单地解决问题时,这样做是不负责任的。如果您不能因为某些公司禁用安全性而被解雇,我会感到惊讶。


这不会打开“你的机器”受到攻击。恶意 JavaScript 代码无法在客户端机器本身上做很多事情。但是,您将允许恶意 JavaScript 代码潜在地操纵您在其他网站(facebook/administrations/banks/...)上的帐户。这当然不会减少危险,但它完全不同。
不过,用户可能需要这样做。问题不在于运行服务器。问题是在将 CORS 放到验收/生产服务器之前对其进行测试,而无需进行此更改。修改主机文件也不起作用。
更像: OP:“我了解风险,但我仍然想这样做。我是成年人。” @you:“在任何情况下你都不能”
@gman 否。因为隔壁没有医院,所以投了反对票。医院不可用。
W
WickyNilliams

对于 Selenium Webdriver,在这种情况下,您可以让 selenium 使用适当的参数(或“开关”)启动 Chrome。

 @driver = Selenium::WebDriver.for(:Chrome, { 
       :detach => false,
       :switches => ["--disable-web-security"]
    })

这是禁用网络安全的两个前面的破折号。它是我的浏览器,它使它们看起来像一个 looong dash。
我写了一篇关于 chrome without cors 的小帖子
M
Mohamed Saleh

您可以使用这个名为“Allow-Control-Allow-Origin:*”的 chrome 插件......它使它变得非常简单并且工作得很好。 check it here: *

https://i.stack.imgur.com/f8wap.png


它将“evil.com”网站设置为来源,看起来很可疑。
根据此评论的日期不再起作用。建议只使用标志路线。
K
Kamil Kiełczewski

对于 OSX,从终端运行以下命令:

open -na Google\ Chrome --args --disable-web-security --user-data-dir=$HOME/profile-folder-name

这将启动一个新的 Google Chrome 实例,并在顶部显示警告。

注意:如果您使用 --user-data-dir,则 chrome 会与您的用户数据文件夹断开连接(并从您的所有站点中注销)——即使您在没有任何参数的情况下再次运行它。要回滚它,您需要以上述方式打开但没有该参数。


P
Peter Wilson

您可以简单地使用这个 chrome 扩展程序 Allow-Control-Allow-Origin

只需单击扩展的图标即可根据需要打开或关闭启用跨资源共享


链接已失效。
它不是。是的,它正在工作。但是我们在这里,因为我们现在命令意味着什么,所以在此之前使用上述解决方案!
@Jánosi-BorsosRóbert 谁包含在您的“我们”中,您对命令含义的了解如何将您带到这里?仅供参考:您的命令不准确,我没有服从;)
没错@Superole。我的意思是我认为使用命令比安装扩展更好。
它不适用于 iframe。它仅禁用部分 CORS
c
chhantyal

如果您在 Linux 上使用 Google Chrome,则以下命令有效。

google-chrome  --disable-web-security

B
Bruce

这个 Chrome 插件适用于我:Allow-Control-Allow-Origin: * - Chrome Web Store


这个插件破坏了我的浏览器并开始破坏所有 XHR 的东西。谨慎使用。
此插件已从 chrome 商店中删除
S
Saurabh Chandra Patel

仅适用于 MAC 用户

open -n -a /Applications/Google\ Chrome.app --args --user-data-dir="/tmp/someFolderName" --disable-web-security

如何恢复此更改@saurab
@MohasinAli 关闭所有 chrome 窗口,然后像往常一样运行它。它只影响您使用此参数运行的实例。如果您在没有任何参数的情况下再次运行它,则不会应用此更改。
S
Santiago M. Quintero

在 Linux-Ubuntu 上,要同时运行正常会话和不安全会话,请运行以下命令:

google-chrome  --user-data-dir=/tmp --disable-web-security

g
guya

按照 Ola Karlsson 的回答,确实最好的方法是在不同的会话中打开不安全的 Chrome。这样您就无需担心关闭所有当前打开的标签页,还可以继续使用原始 Chrome 会话安全地上网。

这些批处理文件应该只适用于 Windows。

将其放在 Chrome_CORS.bat file 中以方便使用

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

这个适用于 Chrome CanaryCanary_CORS.bat

start "" "c:\Users\%USERNAME%\AppData\Local\Google\Chrome SxS\Application\chrome.exe" --user-data-dir="c:/_canary_dev" --disable-web-security

这是对批处理文件的毫无意义的使用。一条捷径会更好。只需将第一对引号之后的所有内容都放入快捷方式目标中。
这并不重要。但是,您可以批量执行更多操作,例如在关闭浏览器后删除用户数据目录。
确实,在启动之外添加行为会很有用,但对于大多数需要这个的人来说,拥有一个持久的用户目录是有帮助的(例如,安装了扩展)
z
zondo
chromium-browser --disable-web-security --user-data-dir=~/ChromeUserData/

I
ItsAllABadJoke

在 Windows 10 上,以下将起作用。

<<path>>\chrome.exe --allow-file-access-from-files --allow-file-access --allow-cross-origin-auth-prompt

我很惊讶你的回答被否决了。使用最新的 Chrome 版本处理本地文件对我来说效果很好。
@CHANist:这也许就是OP说“在Windows 10上”的原因......?
d
denodster

这是一个不断变化的目标......今天我需要添加另一个标志来让它工作:--disable-site-isolation-trials

OS X:open /Applications/Google\ Chrome.app --args --user-data-dir="/var/tmp/Chrome_dev_2" --disable-web-security --disable-site-isolation-trials


B
Braian Mellor

对于 mac 用户:

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

在 Chrome 48 之前,您可以使用:

open -a "Google Chrome" --args --disable-web-security

谢谢。这适用于包含新 CORB 安全策略的最新 Chrome 73。
L
Let Me Tink About It

有一个名为 CORS Toggle 的 Chrome 扩展程序。

Click here to access it and add it to Chrome

添加后,将其切换到开启位置以允许跨域请求。


链接已失效。
m
me_astr

在 Ubuntu 中使用以下命令启动 chrome(禁用同源策略并以分离模式打开 chrome):

nohup google-chrome --disable-web-security --user-data-dir='/tmp' &

A
AFA

对于 Windows:

(使用 Windows 8.1,铬 44.0)

首先,关闭谷歌浏览器。

然后,打开命令提示符并转到“chrome.exe”所在的文件夹。

( for me: 'chrome.exe' is here "C:\Program Files (x86)\Google\Chrome\Application".

所以我输入: cd C:\Program Files (x86)\Google\Chrome\Application

现在输入:chrome.exe --disable-web-security

将打开一个新的 chrome 窗口。


S
Sufiyan Ansari

以下命令仅适用于 OSX Catalina。

open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security