相关疑难解决方法(0)

使用内容脚本将代码插入页面上下文

我正在学习如何创建Chrome扩展程序.我刚开始开发一个来捕捉YouTube活动.我想将它与YouTube Flash播放器一起使用(稍后我将尝试使其与HTML5兼容).

manifest.json的:

{
    "name": "MyExtension",
    "version": "1.0",
    "description": "Gotta catch Youtube events!",
    "permissions": ["tabs", "http://*/*"],
    "content_scripts" : [{
        "matches" : [ "www.youtube.com/*"],
        "js" : ["myScript.js"]
    }]
}
Run Code Online (Sandbox Code Playgroud)

myScript.js:

function state() { console.log("State Changed!"); }
var player = document.getElementById("movie_player");
player.addEventListener("onStateChange", "state");
console.log("Started!");
Run Code Online (Sandbox Code Playgroud)

问题是控制台给了我"开始!" ,但没有"状态改变!" 当我播放/暂停YouTube视频时.

将此代码放入控制台时,它可以正常工作.我究竟做错了什么?

javascript google-chrome youtube-api google-chrome-extension content-script

452
推荐指数
5
解决办法
24万
查看次数

从内容脚本访问窗口变量

我有一个Chrome扩展程序,如果window.my_variable_name存在变量,它会尝试查找每个浏览过的网址(以及每个浏览器网址的每个iframe).

所以我写了一小段内容脚本:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在尝试太久之后,似乎Content Scripts在一些沙箱中运行.

有没有办法window从Chrome内容脚本访问该元素?

sandbox google-chrome-extension content-script

22
推荐指数
1
解决办法
2万
查看次数

停止使用Chrome扩展程序执行的功能

这是一个简单的页面:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test page</title>
    <script type="text/javascript">
        function foo (num) {
            alert(num);
        }
    </script>
</head>
<body>
    Hello World
    <script type="text/javascript">
        foo(2);
    </script>
</body>
</html>  
Run Code Online (Sandbox Code Playgroud)

我想写一个Chrome扩展程序,以防止执行底部脚本(foo(2)).
我尝试编写一个内容脚本,删除最后一个脚本标记:

document.body.removeChild(document.body.lastChild);  
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我想这可能是因为内容脚本在最后一个脚本行执行后运行.然后我试着设置run_atdocument_startdocument_end,但它们都不适合我..

javascript google-chrome google-chrome-extension

5
推荐指数
1
解决办法
6119
查看次数

绕过 &lt;head&gt; 中的对象冻结(受到广泛保护的网站)

背景

我遇到过一个带有广告横幅的网站。当广告拦截或类似内容删除横幅元素时,网站会重新发送alerts有关无法加载广告的垃圾邮件,从而使观看体验比广告更糟糕。

我喜欢修补并尝试打破网站上的这些“保护”,但是,此时我没有想法。

该网站似乎总体上采用了广泛的保护措施来防止篡改,因此,虽然这个问题“简单地”是关于在头部完成对象冻结的操作,但如何做到这一点存在多种限制。

问题

首先,我不想通过对横幅做一些特殊的事情来解决这个问题,例如使它们可见而不是删除它们。我想攻击alert.

问题是,当网站加载其 时index.html,它会冻结window.alert该部分中的对象,<head>如下所示:

<script>
    Object.defineProperty(window, 'alert', {
        configurable: false,
        writable: false
    })
</script>
Run Code Online (Sandbox Code Playgroud)

之后就不可能这样做了,例如:

window.alert = null;

鉴于我们无法触及警报本身,人们可能会考虑尝试查找并删除对警报的调用......

...不幸的是,这似乎也是不可能的,因为如果没有 JavaScript,网站将无法工作,并且网站使用CSRF-token加载其余脚本。所有加载的脚本还在每个请求中使用 CSRF 令牌。

该网站最初在头部加载一个“加载器脚本”,并且它受到原始策略的保护,因此无法从其他任何地方提供该脚本。该加载器脚本本身使用 CSRF 令牌通过 XMLHttpRequest 加载其余脚本。

还有内容安全策略标头。

这实质上意味着不可能例如让网络服务器充当代理来加载网页、剥离头部中的冻结脚本并传递修改后的网页。至少据我所知 - 据我所知,这正是 CSRF 令牌所阻止的。

我在哪里

我正在使用一个名为Resource Override的 Chrome 扩展,它可以让我:

  • 为网站设置基于正则表达式的规则和操作
  • 进一步设置基于正则表达式的 URL 规则和网站请求某些特定 URL 时的操作
  • “响应”网站发出的任何请求并响应,例如本地提供的文件,但限制是这个本地提供的文件显然会因需要 CSRF 令牌的所有内容而失败
  • 只要网站已加载,就可以在网站的任何位置注入 JavaScript
  • 修改请求和响应头

在头部注入js

对我来说,显而易见的第一步就是简单地将 a 注入window.alert = null到 …

javascript xss google-chrome csrf content-security-policy

5
推荐指数
1
解决办法
424
查看次数

覆盖浏览器 API

我正在为 Firefox、Chrome 等使用 javascript 开发 webextension。

它旨在防止用户浏览器被指纹识别。

由于用于构建浏览器指纹的大部分信息来自浏览器本身的 javascript API,是否可以更改/欺骗常见 API 可能从 webextension/addon 中返回的值?

如果这不是直接可能的,那么有什么方法可以控制这些 API 返回给网站进行指纹识别以保护用户隐私的值吗?

我正在谈论的 API 示例是:

user agent
screen print
color depth
current resolution
available resolution
device XDPI
device YDPI
plugin list
font list
local storage
session storage
timezone
language
system language
cookies
canvas print
Run Code Online (Sandbox Code Playgroud)

javascript firefox-addon-webextensions

4
推荐指数
1
解决办法
977
查看次数