在Chrome中禁用同一来源政策


1571

有什么方法可以在Google的Chrome浏览器上禁用同源策略


1
另请参见peter.sh/experiments/chromium-command-line-switches,我不确定它的真实性,但它似乎是由自动过程生成的集合
CSSian

1
chrome.org链接到该peter.sh页面,因此必须合法。
Benjineer 2015年

2
请注意,即使仅用于开发时,禁用SOP也是很危险的。当您以这种方式启动浏览器时,您可能不仅会打开您的应用程序,还会检查您的邮件,阅读SO ...考虑使用更好的替代方法(例如Web代理)来解决这些问题。例如通过proxrox:github.com/bripkens/proxrox
BenR 2015年

29
从49版开始,请使用此选项--disable-web-security --user-data-dir
vanduc1102

3
对于任何寻求在开发人员环境中使用运行环境运行服务器的操作方面提出建议的人,请参见:gist.github.com/Vp3n/5340891
GrayedFox 2016年

Answers:


1034

关闭chrome(或chrome),然后重新启动--disable-web-security参数。我刚刚对此进行了测试,并验证了是否可以访问src =“ http://google.com”嵌入iframe的内容,该页面嵌入在“本地主机”提供的页面中(在Chrome 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

115
如何在OS X上执行此操作?
Landon Kuhn

14
@ landon9720通过ectype查看答案。
ANeves 2012年

8
@Berty只需关闭chrome并在没有标签的情况下将其打开。如果打开带有该标签的Chrome,Chrome才会进入该模式
Nick

84
@ landon9720关闭Chrome,打开终端,键入open /Applications/Google\ Chrome.app --args --disable-web-security
Seanonymous

17
在Chrome 48和49中,还必须添加一个--user-data-dir
雅各布·劳里岑

1069

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

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

--OSX上的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。稳定性和安全性将受到损害。

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


7
刚在PC(chrome 29)上尝试过此方法,但我仍在获取这些可爱的Origin ***不允许访问...-
山姆

23
@Sam确保已关闭所有镶边进程,然后重试。如果正确执行,Chrome会发出警告标题:“您使用的命令行标志不受支持:--disable-web-security。稳定性和安全性将受到损害”
Morten Haraldsen 2013年

2
有没有办法防止错误消息也出现?我在没有键盘或鼠标的数字墙板上使用此标志。
Bart van Heukelom 2014年

64
--disable-web-security除非您也明确给出,否则现在显然不起作用--user-data-dir。即OSX /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security --user-data-dir=~/ChromeUserData/
WiseOldDuck

20
您不必先关闭所有Chrome进程。您可以使用open -n。简单地运行open -n -a Google\ Chrome --args --disable-web-security --user-data-dir=/tmp/chrome。这将在您的Mac上打开第二个Chrome应用程序实例,您可以并排使用它们。
佩尔迈斯特(Pellmeister)'17年

519

对于Windows用户:

我认为这里接受的解决方案的问题在于,如果您已经打开Chrome并尝试运行它,它将无法正常工作。

但是,在研究此问题时,我遇到了有关“超级用户”的帖子,是否可以同时运行带有和不带有Web安全功能的Chrome?

基本上,通过运行以下命令(或使用该命令创建快捷方式并通过该命令打开Chrome)

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

您可以在保持其他“安全”浏览器实例打开并正常运行的同时,打开一个新的“不安全” Chrome实例。 重要提示C:/Chrome dev session每次打开窗口时--disable-web-security都将删除/清除文件夹,因为第二次将不起作用。因此,您无法保存所做的更改,然后使用再次打开它作为第二个不安全的Chrome实例--disable-web-security


17
很好,谢谢。因此,我得以将网页作为独立应用程序启动"C:\..\chrome.exe" --disable-web-security --user-agent="Android" --user-data-dir="C:/temp-chrome-eng" --app="file:///C:/apps/index.html"
Elvis Ciotti 2013年

2
正是在尝试对本地计算机上的API进行开发时,我需要什么。
generalopinion 2014年

4
这工作了。它还使我的chrome正常实例保持了安全性并可以正常运行。仅在运行时附带说明,Chrome会通知您“稳定性和安全性将受到损害”。
etoxin

1
如何在Mac中执行此操作?使用尝试过open -a Google\ Chrome --args --disable-web-security -–allow-file-access-from-files --user-data-dir="/Users/myuser/temp/chromeData",它只是使现有的chrome窗口获得了焦点,没有别的吗?
user3648895

17
此命令通过启动第二个实例在OSX中起作用:( open -n -a /Applications/Google\ Chrome.app --args --user-data-dir="/tmp/chrome_dev_session" --disable-web-security 您可能需要先创建temp文件夹)
chilltemp 2015年

160

对于Windows

  1. 打开开始菜单
  2. 输入windows+ R或打开“运行”
  3. 执行以下命令:

    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浏览器应打开,并显示以下消息:

在此处输入图片说明


7
@downvoters请提及否决的原因,因为没有答案的要点
GSB

1
我在Windows 10上运行良好,也不需要关闭其他Chrome实例。
尼克M,

这可以在Windows 10上运行。我在其他地方看到了它,但是它说要在命令行而不是Windows上运行它Run
chidimo '19

运行正常,如何将其用于IE,Edge!
詹森·布罗迪

这很好。我已经经历了几个小时的CORS问题,发现了这个问题。
Achintha

78

对于使用Chrome版本60.0.3112.78(解决方案经过测试并正常工作的日期)且至少直到今天的19.01.2019(版本71.0.3578.98)的Windows用户。你并不需要关闭任何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浏览器不允许开发人员在不启动新会话的情况下禁用此功能。至少他们有办法。
FearlessFuture

并且您仍然可以在源代码上使用chrome调试吗?
Righto

刚刚测试过,您仍然可以在此模式下使用dev工具。

从Chrome版本71开始,此解决方案仍然有效。非常感谢!
Motoman

适用于72.0.3626.109。帮助很大!
帕维尔·莫尔恰诺夫

76

编辑3:似乎扩展名不再存在...这些天通常为了避开CORS,我用单独的目录设置了另一个版本的Chrome,或者我将Firefox与https://addons.mozilla.org/zh-CN/ firefox / addon / cors-everywhere /代替。

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

编辑:我只是在另一天尝试使用另一天,它停止工作。卸载并重新安装扩展后,已对其进行了修复(以重置默认值)。

原始答案:

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

Chrome网上应用店Allow-Control-Allow-Origin:*
(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=zh-CN)

基本上,这是一个小拨动开关,用于启用和禁用Allow-Access-OriginControl检查。对于我的工作非常适合我。


1
我的扩展需要访问跨域时如何实现并与扩展集成。我不能强迫用户使用禁用网络安全性打开浏览器
代码

1
不幸的是,此扩展名不适用于本地文件。--disable-web-security在这种情况下,请坚持使用开关。
bryc

2
@bryc并不是真的。尽管可以考虑使用--allow-file-access-from-files而不是禁用所有Web安全性。
科本

1
警告!某些网站不允许您在启用此扩展程序的情况下登录!例如,Firebase控制台。
Campsjos

1
“扩展名不再存在”,您可以删除答案还是至少将Edit 3以粗体显示在顶部
Michael Freidgeim,

48

似乎以上解决方案均未真正起作用。本-禁用网络安全是近年来铬版本不再支持。

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日更新]最近我正在开发一个SPA应用程序,需要再次使用corsproxy。但是似乎github上的corsproxy都不能满足我的要求。

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

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

  • 它在纯Node.js代码中,没有任何其他依赖
  • 您可以在http和https模式下运行(通过在命令行中传递https端口号),要运行https,您需要生成cert和key并将它们放在webroot目录中。
  • 它还用作静态文件服务器
  • 它还支持飞行前OPTION请求。

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

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


如果要达到这个程度,您总是可以只在本地或远程托管一个Web服务器,该服务器从所需的网页中提取内容,然后在其上设置适当的CORS标头。
Coburn

我以前曾经想过这条路线。但这需要一些编码,特别是在我的情况下,我需要调用源自不同域的多个服务。因此,我必须将不同的URL模式映射到不同的域。这正是corsproxy为我们所做的。而且效果很好。
陈建武

4
事实并非如此。在接受的答案中提到的方式为我工作。至于它提到,铬49起命令“的chrome.exe -禁用网络安全的user-data-dir的”为我工作..
GAURANG帕特尔

2
Chromium 53,
disable

4
在53+中,您需要实际提供一个与常规目录不同的唯一用户数据目录。这将为不安全的环境创建一个新的配置文件。--user-data-dir需要设置为等于某个值,例如在上面的Olas答案中。如果确实需要,可以将其设置为与实际的普通用户配置文件文件夹相同,但是强烈建议不要这样做,因为如果您在该模式下开始正常浏览,它会使普通配置文件容易受到意外攻击。
lassombra

45

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

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

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

etvoilà:)


从今天08/27/20013开始,它已经对我有效,允许我在自己的本地主机上执行Ajax。
molokoloco

在Canary版本53中获得了“您使用的不受支持的命令行标记:
disable

4
@khoailang,您仍然可以使用该开关。该警告是Google对抗不安全之战的一部分(一件好事)。另外,从55+版本开始,您还需要使用--user-data-dir = <此处的其他目录>,因此Google不想让您将不安全的规则与常规配置文件混合使用。
lassombra

43

在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和命令行打开对我有用。与上面的命令相同,因此请投票。
Max MacLeod

40

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

29

使用当前最新的chrome版本(83.0.4103.61(正式版本)(64位)),使其在我的测试中起作用的唯一方法是使用以下标志启动chrome(将D:\ temp更改为您喜欢的方式) 。此解决方案会将chrome作为测试的沙箱启动,并且不会影响主要的chrome配置文件:

--disable-site-isolation-trials --disable-web-security --user-data-dir =“ D:\ temp”

在Windows中,单击开始按钮,然后复制并粘贴以下内容:

chrome.exe  --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"

5
这是唯一适用于我的解决方案。我遇到这个chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp"run窗口中的窗口10.感谢。
Sampath

头发拉硬-似乎不再起作用
Daniel Sokolowski

1
就我而言,添加--disable-site-isolation-trials确实对我有帮助,Chrome v 75.0,Selenium Web Driver,Java。谢谢!
Nikolay Chernov

如果您只需要使用cors测试网站,请使用Safari,您只需要打开和关闭选项即可,而不必启动浏览器的另一个实例或杀死实例:[ stackoverflow.com/a/12158217/922457 ]
Edenshaw

1
在Windows上为我工作!谢谢!
–Jánosi-BorsosRóbert


19

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

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

1
这是disable-web-security的前两个破折号。在我的浏览器中,它们看起来像是一个破折号。
mikelupo 2012年

我写了一篇有关无心铬
Alex Filatov

14

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

google-chrome  --disable-web-security


13

不要这样! 您正在向攻击开放帐户。完成此操作后,任何第三方网站都可以开始向其他网站(您已登录的网站)发出请求。

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

cd path/to/files
python -m SimpleHTTPServer

然后将浏览器指向

http://localhost:8000

如果发现它太慢,请考虑此解决方案

更新资料

对此答案不满意的人也应该在这里投票,对这个答案也要一致。不知道为什么我的答案如此之低,而这里的相同答案是投票最高的答案。

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

告诉人们禁用安全性就像告诉您的朋友不要打开前门和/或门垫下的钥匙一样。当然,赔率可能很低,但是如果他们确实被盗了,如果没有被迫入境的证明,他们可能很难领取保险。同样,如果禁用安全性,则只不过是在禁用 安全性。当您可以简单地在不禁用安全性的情况下解决问题时,这样做是不负责任的。如果您不能因为禁用安全而被某些公司解雇,我会感到惊讶。


9
这不会使“您的机器”受到攻击。恶意的JavaScript代码将无法在客户端计算机本身上做很多事情。但是,您将允许恶意JavaScript代码潜在地操纵您在其他网站(facebook / administrations / banks / ...)上的帐户。这当然并没有那么危险,但是完全不同。
暗淡



2
尽管如此,用户可能仍需要这样做。问题不在运行服务器。问题是在将CORS放入不需要更改的验收/生产服务器上之前先对其进行测试。修改主机文件也不起作用。
Jeff Huijsmans

如果没有服务器,就无法测试CORS,因为CORS是服务器端技术。为了测试CORS,您需要设置服务器以发送CORS标头。有两件事要测试(1)服务器是否发送标头(2)服务器发送标头是否可以使用浏览器中的资源?(1)和(2)都需要一台服务器。如果只想执行2,则可以使用此服务器但仍然需要对将要用于生产站点的服务器进行测试(2)。
gman

11

您可以简单地使用此Chrome扩展名Allow-Control-Allow-Origin

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


链接已死。
Vitaly Zdanevich

它不是。是的,它正在工作。但是我们在这里是因为命令现在意味着什么,因此请在此之前使用上述解决方案!
Jánosi-BorsosRóbert

@Jánosi-BorsosRóbert包含在您的“我们”中,您对命令含义的了解如何将您带到这里?仅供参考:您的命令不精确,我没有听从;)
Superole


9
chromium-browser --disable-web-security --user-data-dir=~/ChromeUserData/

7

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

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

我很惊讶您的回答被否决了。对于使用最新Chrome版本的本地文件,它对我来说效果很好。
Waruyama

@CHANist:这也许就是为什么OP会说“在Windows 10上 ……”的原因?
劳伦斯·多尔

7

根据Ola Karlsson的回答,确实最好的方法是在另一个会话中打开不安全的Chrome。这样,您无需担心关闭所有当前打开的标签页,也可以继续使用原始的Chrome会话安全地浏览网页。

这些批处理文件应只在Windows上为您工作。

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

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

这是Chrome Canary专用的。金丝雀_CORS.bat

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

这是对批处理文件的无意义的使用。为此,捷径会更好。只需将第一对引号后的所有内容放入快捷方式目标即可。
lassombra

没关系。但是,例如,在关闭浏览器后,您可以批量执行更多操作,例如删除user-data-dir。
Guya

的确,在刚启动时添加行为会很有用,但是对于大多数需要此功能的人来说,拥有一个持久的用户目录(例如安装了扩展名)很有帮助
lassombra

7

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

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

6

对于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。
StuyvesantBlue


6

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

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

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


5

这是一个不断变化的目标。...今天,我需要添加另一个标志来使其正常工作: --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


3

对于Windows:

(使用Windows 8.1,Chrome 44.0

首先,关闭google chrome。

然后,打开命令提示符,然后转到“ 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的新窗口将打开。


3

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

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

3

在Windows上:

1)创建一个新的快捷方式:

创建新的快捷方式

2)粘贴以下路径:

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

粘贴路径

3)在下一页中输入:

Unsafe Chrome.exe

在此处输入图片说明

现在,您在桌面上有一个不安全的镶边,可用于调试CORS应用程序。希望此图形答案对某些人有所帮助!


1

尝试转到此页面并为您的网站域禁用域安全策略。

chrome://net-internals/#hsts

1
请解释。在底部的此页面上,我看到了Input a domain name to delete its dynamic domain security policies (HSTS and Expect-CT). (You cannot delete preloaded entries.):
Vitaly Zdanevich

有人解决了吗?
Yipeekiyay

@RahulMalu您是否以某种方式使它工作?
Ben Racicot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.