题 在Chrome中停用相同的来源政策


有没有办法禁用 同源政策 在谷歌上  浏览器吗?

这是严格的开发,而不是生产用途。


1085
2018-06-23 15:00


起源


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


答案:


关闭铬(或铬)并重新启动 --disable-web-security 论据。我刚刚对此进行了测试并验证了我可以访问iframe的内容,其中src =“http://google.com”嵌入在“localhost”(在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

788
2017-07-05 07:20



如何在OS X上执行此操作? - Landon Kuhn
@ landon9720看到了答案 ectype。 - ANeves
@Berty只需关闭chrome并在没有标签的情况下打开它。 Chrome只会处于该模式 如果 它是用那个标签打开的 - Nick Miceli
@ landon9720关闭Chrome,打开终端,输入 open /Applications/Google\ Chrome.app --args --disable-web-security - Seanonymous
在Chrome 48和49中,必须添加 --user-data-dir 同样。 - Jacob Lauritzen


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

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


897
2018-05-21 18:36



刚刚在电脑上试过这个(镀铬29),我仍然得到这些可爱的Origin ***是不允许的Access ... - Sam
@Sam确保您已关闭所有Chrome进程,然后重试。如果您已正确完成,Chrome将发出警告标题:“您使用的是不受支持的命令行标记: - disable-web-security。稳定性和安全性将受到影响” - Morten Haraldsen
有没有办法防止错误信息出现?我在没有键盘或鼠标的数字墙板上使用这个标志。 - Bart van Heukelom
显然现在 --disable-web-security 除非你明确给出一个,否则不起作用 --user-data-dir。即OSX /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security --user-data-dir=~/ChromeUserData/。 - WiseOldDuck
您无需先关闭所有Chrome进程。您可以使用 open -n。简单地跑 open -n -a Google\ Chrome --args --disable-web-security --user-data-dir=/tmp/chrome。这将在您的Mac上打开第二个Chrome应用实例,您可以并排使用它们。 - Pelle ten Cate


对于Windows用户:

在我看来,此处接受的解决方案的问题是,如果您已经打开Chrome并尝试运行它,则无法运行。

然而,在研究这个时,我发现了一篇关于超级用户的帖子, 是否可以同时运行带有和不带网络安全保护功能的Chrome?

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

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

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


364
2017-10-11 12:13



太好了,谢谢。多亏了这一点,我已经能够将网页作为一个独立的应用程序启动 "C:\..\chrome.exe" --disable-web-security --user-agent="Android" --user-data-dir="C:/temp-chrome-eng" --app="file:///C:/apps/index.html" - Elvis Ciotti
正是在尝试针对本地计算机上的API进行开发时我需要的。 - generalopinion
这是一种享受。它还保留了我正常的chrome实例,安全性已打开且运行正常。只要注意它确实有效Chrome就会通知您“稳定性和安全性会受到影响”。 - etoxin
在尝试此操作之前,您必须关闭所有chrome窗口并终止chrome进程。 - sibidiba
此命令通过启动第二个实例在OSX中工作: open -n -a /Applications/Google\ Chrome.app --args --user-data-dir="/tmp/chrome_dev_session" --disable-web-security  (您可能需要先创建临时文件夹) - chilltemp


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

Chrome网上应用店允许控制 - 允许 - 来源:*
(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en)

基本上它是一个小的切换开关来打开和关闭Allow-Access-Origin-Control检查。对我来说非常适合我正在做的事情。

编辑:我尝试使用另一天的另一个项目,它停止工作。卸载并重新安装扩展程序修复它(重置默认值)。


61
2018-06-20 06:03



我如何实现和扩展我的扩展,因为我的扩展需要访问跨域。我无法强制用户打开浏览器wth disable-web-security - codebased
它只允许AJAX请求而不是正常的网页和扩展来访问网页。 - Lothar
遗憾的是,此扩展名不适用于本地文件。坚持下去 --disable-web-security 在这种情况下切换。 - bryc
@bryc这不是真的意思。考虑一下你可以使用 --allow-file-access-from-files 而不是禁用所有Web安全性。 - Coburn
扩展很有用,按预期工作。 但 如果我切换此扩展程序然后我无法浏览youtube,谷歌文档等..我肯定在扩展中的问题。 - MyTitle


对于 视窗

  1. 打开开始菜单
  2. 类型 视窗+[R 或者打开“运行”
  3. 执行以下命令:

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

对于 苹果电脑

  1. 去终端
  2. 执行以下命令:

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

应打开一个新的Web安全禁用Chrome浏览器,并显示以下消息:

enter image description here


57
2018-02-03 12:59



@downvoters请提及downvote的原因,因为在回答中没有点downvote - GSB
在Windows 10上为我工作得很好,也不需要关闭其他Chrome实例。 - Nick M


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

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

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

etvoilà:)


38
2017-08-27 12:43



截至今天08/27/20013它对我有用,允许我在我自己的localhost上做Ajax。 - molokoloco
不幸的是,这对我不起作用。 - Tod Birdsall
得到“你正在使用不受支持的命令行标记:--disable-web-security”与Canary版本53 - khoailang
@khoailang你仍然可以使用开关。这一警告是谷歌不安全战争的一部分(一件好事)。此外,从版本55+开始,您还需要使用--user-data-dir = <此处的其他目录>,因此Google不希望您将不安全的规则与普通配置文件混合使用。 - lassombra


似乎以上解决方案都没有实际工作。该 - 禁用网络安全 最近的Chrome版本不再支持。

Allow-Control-Allow-Origin:* - chrome扩展名 部分解决了这个问题。仅当您的请求使用GET方法并且没有自定义HTTP标头时,它才有效。否则,chrome将发送OPTIONS HTTP请求作为飞行前请求。如果服务器不支持CORS,它将使用404 HTTP状态代码进行响应。该插件无法修改响应HTTP状态代码。所以chrome会拒绝这个请求。 Chrome插件无法根据当前的chrome扩展API修改响应HTTP状态代码。并且您也无法对XHR发起的请求进行重定向。

不确定为什么Chrome让开发人员的生活如此艰难。它阻止了所有可能的方法来禁用XSS安全检查,即使是完全没必要的开发使用。

经过几天的努力和研究,一个解决方案对我来说非常有用:使用 corsproxy。你有两个选择: 1.使用corsproxy.com 2.在本地框中安装corsproxy: npm install -g corsproxy

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

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

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

  • 它位于plain nodejs代码中,没有任何其他依赖项
  • 您可以在http和https模式下运行(通过传递https端口 命令行中的数字),要运行https,您需要生成证书和 键并放入webroot目录。
  • 它还充当静态文件服务器
  • 它也支持飞行前OPTION请求。

32
2018-01-12 07:51



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


对于 视窗 用户 Chrome版本60.0.3112.78。您 不要 需要关闭任何chrome实例。

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

请注意不要使用这个特殊的浏览器进行浏览,因为你可以使用它!


31
2017-08-01 09:27



工作就像一个魅力。我不相信Chrome不允许开发人员在不启动新会话的情况下禁用此功能。至少他们有办法。 - FearlessFuture
你还能在源代码上使用chrome调试吗? - Righto
刚刚测试过,您仍然可以在此模式下使用开发工具。 - KuN


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

enter image description here


30
2018-01-13 23:48



这只是给我404现在而不是飞行前错误 - L1ghtk3ira
404错误是与服务器相关的错误,而不是谷歌浏览器错误。 - etoxin
@etoxin这个答案在最新版本的chrome中不再有效。你必须添加--disable-web-security --user-data-dir =“D:/ Chrome” - vignesh sivakumar
更新了使用最新chrome的答案。 - etoxin


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

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

16
2018-03-27 13:07



这是禁用网络安全的两个先前破折号。它是我的浏览器,它使它们看起来像一个looong短划线。 - mikelupo