关于javascript:在Chrome中停用相同的来源政策

Disable same origin policy in Chrome

有没有办法在谷歌的Chrome浏览器上禁用相同的源站策略?


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

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

--OSX上的Chrome 49+需要用户数据目录

Linux运行:

1
$ google-chrome --disable-web-security

另外,如果您试图访问本地文件以实现开发目的(如Ajax或JSON),也可以使用此标志。

1
-–allow-file-access-from-files

对于Windows,进入命令提示符并进入chrome.exe所在的文件夹,然后键入

1
chrome.exe --disable-web-security

这将禁用相同的源策略,并允许您访问本地文件。

更新:对于Chrome22+,您将收到一条错误消息,说明:

You are using an unsupported command-line flag: --disable-web-security. Stability and security will suffer.

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


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

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

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

浏览器将在第一次打开时警告您"您使用的是不受支持的命令行",您可以忽略它。

铬源:

1
2
// Don't enforce the same-origin policy. (Used by people testing their sites.)
const wchar_t kDisableWebSecurity[] = L"disable-web-security";

在Chrome48之前,您只需使用:

1
chromium-browser --disable-web-security


对于Windows用户:

这里接受的解决方案的问题是,在我看来,如果您已经打开了chrome并尝试运行它,那么它将不起作用。

但是,在研究这一点时,我遇到了一篇关于超级用户的文章,是否可以同时运行带有或不带有Web安全性的Chrome?.

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

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

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


对于Windows:

  • 打开"开始"菜单
  • 键入windowsabbkbd+r或打开"运行"
  • 执行以下命令:

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

  • 走向终端
  • 执行以下命令:

    1
    open /Applications/Google\ Chrome.app --args --user-data-dir="/var/tmp/Chrome dev session" --disable-web-security
  • 新的禁用Web安全的Chrome浏览器应打开并显示以下消息:

    enter image description here


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

    chrome web store allow control allow origin:*(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfmbojpecafghkpbjhddihlkkiljbi?)HL= EN)

    基本上,它是一个小的切换开关来打开和关闭允许访问源代码控制检查。对于我所做的一切都是完美的。

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

    编辑2:我再也不能让它持续工作了


    对于Chrome版本为60.0.3112.78的Windows用户(在测试和运行解决方案的当天),至少要到2019年1月19日(版本)。71.0.357898)。您不需要关闭任何chrome实例。

  • 在桌面上创建快捷方式
  • 右键单击快捷方式,然后单击属性。
  • 编辑目标属性
  • 将其设置为"C:Program Files(x86)GoogleChromeApplicationChrome.exe"--禁用Web安全--用户数据dir="C:/Chromedevsession"
  • 启动chrome并忽略消息"不支持禁用Web安全!"
  • 小心不要使用这个特定的浏览器实例进行浏览,因为您可能会被黑客攻击!


    似乎上面的解决方案都不起作用。最新的Chrome版本不再支持--disable web security。

    允许控制允许来源:*-chrome扩展部分解决了问题。只有当您的请求使用get方法并且没有自定义HTTP头时,它才起作用。否则,chrome将发送选项http请求作为飞行前请求。如果服务器不支持CORS,它将以404 HTTP状态代码响应。插件无法修改响应HTTP状态代码。所以Chrome将拒绝这个请求。Chrome插件无法基于当前的Chrome扩展API修改响应HTTP状态代码。对于XHR发起的请求,您不能进行重定向。

    不知道为什么Chrome让开发人员的生活如此困难。它会阻止所有可能的禁用XSS安全检查的方法,即使对于完全不必要的开发用途也是如此。

    经过几天的努力和研究,有一个解决方案对我来说是完美的:使用Corsproxy。这里有两个选项:1。使用[https://cors-anywhere.herokupp.com/]2。将Corsproxy安装在本地箱中:NPM安装-G Corsproxy

    [更新日期:2018年6月23日]最近我正在开发一款SPA应用程序,需要再次使用Corsproxy。但看来Github上的Corsproxy都不能满足我的要求。

    • 出于安全考虑,需要它在防火墙内部运行。所以我不能在任何地方使用https://cors.herokupp.com/。
    • 它必须支持https,因为chrome不会阻止https页面中的https-ajax请求。
    • 我需要在点头的时候跑步。我不想维护另一个语言栈。

    所以我决定用nodejs开发我自己的corsproxy版本。其实很简单。我已经在Github上作为一个要点发布了它。以下是源代码要点:https://gist.github.com/jianwu/8e76eaec95d9b1300c595996fbfc21b10

    • 它在普通的nodejs代码中,没有任何附加的依赖关系
    • 您可以在HTTP和HTTPS模式下运行(通过传递HTTPS端口命令行中的数字),要运行https,需要生成cert和键并将它们放在webroot目录中。
    • 它还充当静态文件服务器
    • 它还支持飞行前选项请求。

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

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


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

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

    (将"c:….chrome.exe"更改为chrome所在的位置)。

    ET Vule:()


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

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

    你的目标应该是这样的:

    更新:添加了新标志。

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

    enter image description here


    在Mac终端上尝试此命令-

    1
    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。


    您可以使用这个名为"允许控制允许来源:*"的chrome插件。它使它变得非常简单,而且工作得很好。请在此处检查:*

    Chrome extenstion


    对于Selenium WebDriver,您可以让Selenium Start Chrome使用适当的参数(或"switches"),在这种情况下。

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


    如果您在Linux上使用Google Chrome,那么下面的命令可以工作。

    1
    google-chrome  --disable-web-security

    这个Chrome插件适用于我:允许控件允许来源:*-Chrome Web Store


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

    您可以简单地使用这个chrome扩展允许控制允许来源

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


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

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


    仅限Mac用户

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


    按照OlaKarlsson的回答,实际上最好的方法是在不同的会话中打开不安全的Chrome。这样,您就不必担心关闭所有当前打开的选项卡,也可以继续使用原始的chrome会话安全地浏览网页。

    这些批处理文件只在Windows上对您有效。

    把它放在chrome-cors.bat文件中,方便使用

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

    这个是给铬金丝雀的。加拿大蝙蝠

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


    对于Mac用户:

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

    在Chrome48之前,您可以使用:

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


    有一个叫做cors toggle的chrome扩展。

    单击此处访问并将其添加到Chrome。

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


    使用当前最新的Chrome版本(73.0.3683.86),使其在我的测试中工作的唯一方法是使用以下标志启动Chrome(将d: emp更改为您喜欢的):

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

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

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


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

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

    这是一个不断移动的目标……今天,我需要添加另一个标志以使其工作:--disable-site-isolation-trials

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


    对于Windows:

    (使用Windows 8.1、Chrome 44.0)

    首先,关闭Google Chrome。

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

    1
    ( 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

    一个新的铬合金窗口将打开。


    不要这样!你的账户被攻击了。一旦你这样做,任何第三方网站都可以开始向你登录的其他网站发出请求。

    而是运行本地服务器。它就像打开一个shell/终端/命令行并键入

    1
    2
    cd path/to/files
    python -m SimpleHTTPServer

    然后将浏览器指向

    1
    http://localhost:8000

    如果你发现速度太慢,考虑这个解决方案


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

    1
    chrome://net-internals/#hsts

    在Windows PC上,使用一个旧版本的chrome,这个命令对你们所有人都有效。我把我的Chrome降到了26版,它工作了。


    我有时会使用它,将本地主机前端站点发布到本地主机后端API(例如,对旧的.NET API作出反应)。我在我的Windows10桌面上创建了一个单独的快捷方式,这样它就不会用于正常浏览,只用于本地调试。我做了以下工作:

  • 右键单击桌面,添加新快捷方式
  • 将目标添加为EDOCX1[0]
  • 单击确定。
  • 加载此浏览器时,您将收到一条警告,即它不安全,只需注意您在其上浏览的内容即可。我倾向于在桌面上重命名这个新的快捷方式,用大写字母,并将它从我的其他图标中移开,这样它就不会被普通的Chrome所混淆。

    希望这有帮助!