如何在开发者控制台中使用Chrome注入jQuery?

问题描述 投票:5回答:4

问题

我曾经能够(本地)使用以下两个Chrome扩展中的任何一个来轻松地将jQuery注入到尚未拥有jQuery的页面中,并且我没有(客户端)来试验设计更改,开发修改和实时故障排除:

不幸的是,现在因为看起来是防止“XSS”(跨站点脚本)的最新热潮,这些插件不再起作用。这些变化背后可能有一个崇高的目的,我只是想了解改变了什么。我认为这与“内容安全政策”有关,我最近才听说过这个政策并且对此知之甚少。

我在2011年首次了解到XSS作为浏览器问题,然而,XSS预防措施从未妨碍我以前进行本地开发。我一直在寻找现代(2017年末)的解决方案,但无济于事。

我不知道从哪里开始。

我曾经尝试过什么都没有用过

以下是我尝试的插件(以前大约6个月前工作)不再适用于我:

  1. jQuery in Console (Plugin)
  2. jQuery Inject (Plugin)
  3. jQuery Injector (Plugin)
  4. GitHub - bluerabbit/jquery-inject: jQuery-inject(Chrome extension)

以下是我遇到的一些提供解决方案的链接,这些链接不再有效:

最后一个也看起来很有希望,但我还没有尝试过:

我的问题

  1. 如何将jQuery(使用Chrome Developer Console)注入不使用jQuery的网页?
  2. 在2017年,浏览器/ JavaScript /编程世界发生了一些变化,如果一个人知道这个特定的变化或现象,它很容易解释为什么上面的插件不再起作用?
  3. 为什么上面的插件不起作用?今年所有浏览器公司是否普遍推出了一些重大变化?
javascript jquery dependency-injection google-chrome-devtools
4个回答
2
投票

这是一个一直对我有用的直接方法:

var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);

// ... give time for script to load, then type (or see below for non wait option)
jQuery.noConflict();

只需将每一行粘贴到控制台中,一次一个。 (实际上,如果选择前三行并将它们全部粘贴到D​​evTools控制台中,它可以正常工作)。

然后,在DevTools控制台中,测试它:

$('div').length; //press Enter

如果您收到错误,请尝试以下方式:

jQuery('div').length

希望第一种方法可行 - 但有时您需要使用第二种方法。

希望我可以将此代码声称为我自己的代码,但这要归功于jondavidjohn。请访问下面引用的链接并UPVOTE他的解决方案。

参考:

https://stackoverflow.com/a/7474386/1447509


2
投票

使用Snippets

  1. 复制jQuery代码,并将其粘贴到Snippet中。
  2. 运行代码段。

2
投票

不幸的是,现在因为看起来是防止“XSS”(跨站点脚本)的最新热潮,这些插件不再起作用。这些变化背后可能有一个崇高的目的,我只是想了解改变了什么。我认为这与“内容安全政策”有关,我最近才听说过这个政策并且对此知之甚少。

是。这些插件不起作用的原因是因为它们与恶意攻击者可以注入任意JavaScript的MITM(中间人)攻击无法区分。 CSP(内容安全策略)旨在通过仅从源白名单运行受信任的JavaScript来防止这种情况发生。不幸的是,在开发人员将插件作者的JavaScript / CSS注入白名单之前,目前还没有简单的方法可以在Chrome或Firefox中处理这个问题。这不可能发生,因为Chrome有关于如何遵守CSP政策的guide for app developers

同时,我建议你了解XSS上的OWASP文章,这样你就可以了解为什么它如此重要。

不推荐的方法

您可以从Chrome商店下载“禁用内容 - 安全政策”插件。仅用于本地开发。请记住,如果您这样做,恶意ISP或专门的攻击者仍然可以在MITM攻击中注入脚本(例如,如果他们控制了您的路由器)。

推荐的方法

不要注入jQuery,而是将它放在你的页面中。添加一个CSP标签:

<meta http-equiv="Content-Security-Policy" content="...">

在这里你可以放一些类似default-src 'self'; script-src https://cdn.com/jquery的地方,其中cdn.com是你从中下载jQuery的地方。更进一步,添加一个subresource integrity hash。如果CDN遭到入侵,变得恶意,或者您成为MITM,则哈希将不匹配,并且不会加载恶意脚本。此外,出于同样的原因,你永远不会真正信任插件。

如果您决定不使用CDN,则可以使用将为您下载特定版本的jQuery的包管理器(如node或Bower)。然后只需在本地加载它。当然,对于制作而言,您通常希望使用CDN,以便访问者可以从更近的数据中心下载。此外,如果您使用的是Cloudflare,它们可能会缓存特定版本的jQuery,因此他们不必继续下载它。

原型

如果你的动机是原型,那么有一些解决方法:

不推荐:您可以抓取网站,进行修改,然后呈现给客户。

推荐:您应该进行快速原型设计,而不是在实时网站上进行修改。这样做的好处是:

  • 如果您正在与客户进行坐下,客户可以准确地看到您正在做什么
  • 您正在处理抽象原型而不是具体细节,这应该在合同中规定。有关骨架屏幕的问题,请参阅ux.stackexchange.com
  • 你可以向客户解释为什么你不能做X(将jQuery注入实时站点)当你应该做Y时(见其余的答案),这有望说服他们采用更好的安全实践
  • 原型可以站起来并迅速丢弃,您甚至可以保留修改以进行比较。对现场网站的更改并不容易

1
投票

你可以创建一个非常基本的chrome扩展,它只是在每个页面上注入JQuery。 Getting started with chrome extensions。您可以使用这段代码在清单本身中指定它。

"content_scripts": [
     {
          "matches": ["*"],
          "js": ["jquery.min.js"]  }
]

请注意,匹配中的*将在每个网页上注入脚本。你也可以提供不同的模式。例如,“www.abc.com/*”将匹配以“www.abc.com”开头的所有URL,并且仅在这些页面上注入脚本。

改善方案

更好的方法是创建一个chrome扩展,当你点击扩展图标时,它可以在当前标签中注入你的JavaScript文件。

制作后台脚本并在清单中指定它。

的manifest.json

{
  "name": "My Extension",
  "version": "0.1",
  "manifest_version": 2,
  "description": "inject script",
  "browser_action": {
    "default_icon": "logo.png"
  },
  "permissions": [
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"]
  }
}

在后台脚本中,侦听扩展图标上的单击并在currert选项卡中注入jquery。

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null, {file: "jquery.min.js"});
});
© www.soinside.com 2019 - 2024. All rights reserved.