标签: javascript-injection

Chrome 扩展:如何使用 declarativeNetRequest 绕过内容安全策略

我正在制作一个扩展,将用户提供的脚本注入当前网站。我已经完成了这部分(在wOxxOm的帮助下)。唯一的问题是在某些网站上它不起作用。它在控制台中抛出此错误:Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'。我一直在尝试使用 declarativeNetRequest 修复此问题,但它不起作用。

规则1.json

[
    {
        "id": 1,
        "priority": 1,
        "action": {
            "type": "modifyHeaders",
            "responseHeaders": [
                {
                    "header": "content-security-policy",
                    "operation": "remove"
                }
            ]
        },
        "condition": {
            "urlFilter": "*://*/*",
            "resourceTypes": ["main_frame"]
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

清单.json

{
    ...
    "permissions": ["scripting", "activeTab", "declarativeNetRequest"],
    ...
    "declarative_net_request": {
        "rule_resources": [
            {
                "id": "ruleset_1",
                "enabled": true,
                "path": "/rules/rule1.json"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

JavaScript

let button = document.getElementById("run"); …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome javascript-injection google-chrome-extension

9
推荐指数
1
解决办法
1869
查看次数

如何防止表单在5分钟内被提交多次?

我最近发现我的PM系统存在一个巨大的安全问题,它允许用户for通过地址栏中的循环尽可能多地发送消息.有人把它放到地址栏中:

javascript:for(x=0;x<10000;x++){ $('#compose form').submit(); }
Run Code Online (Sandbox Code Playgroud)

并且消息被发送了1000次给我,我的收件箱中充满了相同的消息,我的数据库非常充实,phpMyAdmin非常迟钝.

我的问题是,我该如何防止这种情况?这是一个重大问题.

此外,表单是使用AJAX提交的.

编辑:

我使用PHP,所以我该如何防止这种情况?就像我怎样才能将消息发送到每5分钟左右发送一次的消息,如果他们在5分钟内提交了多个消息,则会显示错误(或者根本不显示任何用户反馈,只是停止提交)?

php address-bar javascript-injection

8
推荐指数
1
解决办法
1545
查看次数

从Chrome扩展程序控制YouTube播放器

我正在开发一个Google Chrome扩展程序,需要接管YouTube视频的所有控件(播放,暂停,下一个,上一个,更改音量,在X秒开始播放视频等).我尝试了以下方法:

第一种方法:使用content_scripts

manifest.json包含以下内容:

"content_scripts": [
    {
        "matches": ["https://www.youtube.com/*"],
        "js": ["scripts/jquery.js", "scripts/in_page.js"]
    }
],
Run Code Online (Sandbox Code Playgroud)

我正在为每个YouTube链接加载脚本,不仅/watch*因为现在YouTube导航完全使用AJAX,因此页面没有完全刷新,如果我在搜索页面上然后点击视频,则扩展名不会我装了我的content_scripts.

我是如何接管控件的

我成功地触发了YouTube播放器上的简单点击事件,例如播放,暂停,上一个视频,下一个视频.

例如,这可以暂停视频:

$("#player-api .html5-video-controls .ytp-button-pause").trigger("click");
Run Code Online (Sandbox Code Playgroud)

但似乎我无法触发事件,例如单击进度条以从视频的特定时刻播放或重新启动视频.

我尝试了这段代码没有成功(使用jQuery $.Event):

var click = $.Event("click");
click.clientX = 0; // Beginning of the video
click.clientY = 0; // I also tried several other coordinates
$("#player-api .html5-video-controls .html5-progress-bar").trigger(click);
Run Code Online (Sandbox Code Playgroud)

(我也尝试点击每个孩子.html5-progress-bar,但没有任何效果.)

第二种方法:使用注入的脚本

由于我似乎遇到了第一种方法的死胡同,然后我尝试了其他方法:直接在页面内部注入脚本.

manifest.json包含以下内容:

"content_scripts": [
    {
        "matches": ["https://www.youtube.com/*"],
        "js": ["scripts/jquery.js", "scripts/isolated.js"]
    }
],

"web_accessible_resources": [
    "scripts/injected.js"
], …
Run Code Online (Sandbox Code Playgroud)

javascript jquery javascript-injection google-chrome-extension jquery-events

8
推荐指数
1
解决办法
3534
查看次数

在WebView中注入Javascript桥

我想从Android的网页中提取一些内容.我知道有解析HTML的库,但我想也许我可以作弊.

这就是我在做什么..

  1. 使用应用程序上下文以编程方式创建WebView,因此不必在UI中显示.
  2. 加载网页
  3. 附加JS接口
  4. 注入一些Javascript以与主机应用程序进行交互

这是一些代码......

    public void getLatestVersion(){
        Log.e("Testing", "getLatestVersion called...");
        WebView webview = new WebView(context.getApplicationContext());
        webview.loadUrl("https://example.com");
        webview.addJavascriptInterface(new jsInterface(), "Droid");
        webview.loadUrl("javascript: window.onload=function(){ Droid.showToast('testing!'); }");
    }

    class jsInterface{
        @JavascriptInterface
        public void showToast(String message){
            Log.e("Testing", message);
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

由于WebView在UI中不可见,因此很难分辨哪个部分正在破坏.我所知道的是调用了第一个调用的Log,但是JavascriptInterface中的Log和Toast从未显示过.

我正在努力做甚么可能吗?如果是这样,我做错了什么?如果没有,为什么不呢?

编辑

将视图保留在UI中进行测试,显然第二次调用loadUrl不起作用.无论我尝试注入什么Javascript,它都不起作用.

编辑2

忘记启用Javascript我感到愚蠢,但它仍然没有工作..我添加了以下行...

    WebSettings webSettings = webview.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webview.loadUrl("javascript: alert('farts0');");

    webview.loadUrl("https://example.com");
    setContentView(webview);

    String js = "document.body.innerHTML = '<p>test<p>';";
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webview.evaluateJavascript(js, null);
    }else{
        webview.loadUrl("javascript: "+js);
    }
Run Code Online (Sandbox Code Playgroud)

编辑3

感谢大家的建议,你一直很有帮助,但到目前为止它还没有工作,所以除非有人在下一个小时提供工作代码,否则Nainal将得到一半的赏金.如果是这样,我不确定我是否会被允许再给它一个赏金,因为问题仍然没有得到解决.

到目前为止,这是我的完整代码,考虑了此页面上的建议,并尝试了我不太了解的手册中的几个设置.

import android.graphics.Bitmap;
import android.os.Bundle; …
Run Code Online (Sandbox Code Playgroud)

javascript java android javascript-injection webview

8
推荐指数
2
解决办法
4087
查看次数

CefSharp在任何文档加载/处理之前注入Javascript

对于我正在处理的项目,我需要在任何网页文档处理开始之前注入javascript.这可以通过WebBrowser组件轻松实现,但我在使用CefSharp时遇到了困难.

这是问题的简化,网页需要"InjectedObject"才能运行.在文档的最顶部调用未注入的网页,或者在处理文档之前进行评估/执行将导致:

===== html示例输出失败=====

isObjectPresent?

=====

我需要在哪里显示网页:

===== html示例输出成功=====

isObjectPresent?

真正

=====

<html>
  <head>
    <script>
      isObjectPresent = typeof InjectedObject == "object";
    </script>
  </head>
  <body>
    <p>isObjectPresent?</p>
    <div id="result"></div>
    <script>
      document.getElementById("result").innerHTML = isObjectPresent;
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

查看所有可用的建议将表明我应该使用LoadingStateChanged()或FrameLoadEnd()来注入脚本,即:

public void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs args) {
  if (args.Frame.IsMain) {
    args.Frame.ExecuteJavascriptAsync("window.InjectedObject = {};");
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,我尝试过的所有迭代,甚至使用FrameLoadStart,都导致在文档开始处理后出现插入的javascript.是否有任何真正的javascript注入示例确保它在文档处理开始之前发生.(确保避免竞争条件/时间问题).

作为我想模仿的WebBrowser组件行为的一个例子是:

private void uiWebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{
  var browser = (WebBrowser)sender;
  var document = browser.Document as HTMLDocument;
  var head = document.getElementsByTagName("head").Cast<HTMLHeadElement>().First();
  if (head != null)
  {
    var …
Run Code Online (Sandbox Code Playgroud)

javascript c# javascript-injection cefsharp

8
推荐指数
1
解决办法
5402
查看次数

使用 Webview 将对象从 Javascript 发送到 Kotlin

我已经使用 WebView 组件加载了一个网页并添加了一个 JavascriptInterface。请检查下面的代码,

\n\n
val webview = WebView(this)\nsetContentView(webview)\nwebview.settings.javaScriptEnabled = true\nwebview.loadUrl(HOME_PAGE_URL)\nwebview.addJavascriptInterface(JavascriptInterface(),\xe2\x80\x9djavascript_bridge\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我使用 Javascript 调用调用时window.javascript_bridge.showToast(\xe2\x80\x9cInformation Saved\xe2\x80\x9d);

\n\n
private inner class JavascriptInterface\n{\n    @android.webkit.JavascriptInterface\n    fun showToast(text: String?)\n    {\n        Log.d("WEBVIEW", text);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以毫无问题地从 Javascript 调用该方法到 Kotlin。

\n\n

但现在我想将一个对象从 Javascript 传递到 Kotlin,如下所示,

\n\n
var info = {\n    message: \xe2\x80\x9cInformation Saved\xe2\x80\x9d,\n    ID: 123456\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我使用 Javascript 调用调用时window.javascript_bridge.showToast(info);

\n\n

我尝试将数据类型更改为 Any,但从 Javascript 传递的值为 null

\n\n
private inner class JavascriptInterface\n{\n    @android.webkit.JavascriptInterface\n    fun showToast(text: Any?)\n    {\n       Log.d("WEBVIEW", text.toString());\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

javascript android javascript-injection android-webview kotlin

8
推荐指数
1
解决办法
5670
查看次数

包含Javascript的最佳方法是什么?

许多大玩家推荐略有不同的技巧.主要是关于新的安置<script>.

Google Anayltics:

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
Run Code Online (Sandbox Code Playgroud)

Facebook:

(function() {
  var e = document.createElement('script'); e.async = true;
  e.src = document.location.protocol +
    '//connect.facebook.net/en_US/all.js';
  document.getElementById('fb-root').appendChild(e);
}());:
Run Code Online (Sandbox Code Playgroud)

Disqus:

(function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
Run Code Online (Sandbox Code Playgroud)

(发布其他人,我会添加它们) …

html javascript javascript-injection

7
推荐指数
1
解决办法
1477
查看次数

使用JavaScript将CSS注入UIWebView

我试图注入一个本地CSS文件来覆盖网页的样式.该网页显示UIWebView在iOS 中的容器中.但是我无法让我的代码工作.请参阅下面的委托方法的片段.这段代码运行(我可以看到NSLog消息),但我没有在页面上看到它的执行结果.

我知道它不能是我写的CSS,因为在这种情况下,我把页面自己的CSS文件,只是改变了一些颜色.(为了测试这种方法)

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *cssPath = [path stringByAppendingPathComponent:@"reader.css"];
    NSString *js = [NSString stringWithFormat:@"var headID = document.getElementsByTagName('head')[0];var cssNode = document.createElement('link');cssNode.type = 'text/css';cssNode.rel = 'stylesheet';cssNode.href = '%@';cssNode.media = 'screen';headID.appendChild(cssNode);", cssPath];
    [webView stringByEvaluatingJavaScriptFromString:js];
    NSLog(@"webViewDidFinishLoad Executed");
}
Run Code Online (Sandbox Code Playgroud)

javascript objective-c javascript-injection uiwebview ios

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

如何使用 YouTube JS API 跳过 5 秒后的广告?

我几乎可以使用 JavaScript API 来控制 YouTube 播放器做任何事情。

player = document.getElementById('movie_player');
Run Code Online (Sandbox Code Playgroud)

但我找不到任何功能可以让我在 5 秒后跳过广告视频(如果有的话)。

我怎样才能实现这个目标?

javascript youtube-api javascript-injection

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

如何像浏览器中的 adblock 或 adblock plus 一样屏蔽 webvew 中的任何广告?

有没有一些 Android 库可以阻止任何广告?如何阻止使用 javascript 注入?

当我编码时

webView1.getSettings().setJavaScriptEnabled(true);
Run Code Online (Sandbox Code Playgroud)

显示广告,但页面的其他选项不能用作菜单或过滤器。那么如何屏蔽广告但不禁用javascript呢?

android javascript-injection adblock webview

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