【问题标题】:Chrome.extension.getURL and AJAX security issues in Chrome extensionsChrome 扩展中的 Chrome.extension.getURL 和 AJAX 安全问题
【发布时间】:2015-07-11 09:44:40
【问题描述】:

我正在开发一个在页面中注入脚本的扩展。

扩展基本上是一个内容脚本,它将另一个脚本注入到 DOM 中。 (Why not just a content script?)

我的代码没有任何问题,运行良好。这里的主要目的只是了解 Web 开发中的安全问题

注入的脚本是我的扩展中的一个源文件,我通过 JQuery.get 获取它,使用来自chrome.extension.getURL('myscript.js') 的地址。

是否有任何我应该注意的安全问题?

页面不是https,这个get 可以返回与我的脚本不同的内容吗?

我也使用相同的方法插入 HTML 内容。 HTML 文件来自我的扩展,就像脚本一样。中间人是否有可能破坏响应文本??

如果存在此类安全问题,避免此类安全问题的常见做法是什么?

不同的是,如果我创建一个脚本 (document.createElement('script')) 并将其源设置为我的文件。当我将这个脚本注入 dom 时,有人可能会干涉吗? (document.documentElement.appendChild(myScipt))

另外,涉及this approach 的安全问题是什么?注入更改 XMLHttpRequest 方法 opensend 的脚本,以捕获 ajax 调用、添加侦听器并使用完全相同的原始参数发送它们。

也就是说,假设我有这些:

var myScript = document.createElement('script');
myScript.src = chrome.extension.getURL('myscript.js');
var page = chrome.extension.getURL('mypage.html');
  • 在这种情况下,$.get('mypage.html') 能否返回与我的页面不同的内容,因为中间有一个人? (也就是说,我会不会在不知不觉中注入恶意页面?)
  • document.documentElement.append(myScript) 可以注入不同的脚本吗?中间的一个假定的人可以在.src 之间找到并更改实际脚本吗?
  • 由于该脚本旨在更改链接方法中所述的 XMLHttpRequest 原型,我是否可以在 send 中使用与原始调用传递的参数不同的参数?

谢谢!

【问题讨论】:

  • Content scripts 应该用于注入此类代码(另请参阅同一文档中的 Programmatic injection)。
  • 它必须通过描述的内容脚本注入到 DOM 中。这是它唯一的工作方式。
  • 究竟是什么阻止您使用内容脚本或 chrome.tabs.executeScript?
  • 它不起作用,您可以在链接方法中查看所有详细信息。
  • 我从未尝试过“chrome.tabs.executeScript”,我可能会看看。它比我现在做的更安全吗?

标签: javascript jquery ajax security google-chrome-extension


【解决方案1】:

首先,当您从扩展程序中获取文件时,Chrome 既是客户端又是服务器,因此您不需要 https,在这种情况下它毫无价值。中间没有人。

可以想到另一个扩展程序拦截 ajax,但是这样做应该已经有用户授予的适当权限,所以它不会是未经授权的拦截。至少它不会比任何 https ajax 更安全。

而且,正如您所说,另一个中间人攻击在于重新定义 XMLHttpRequest,您可以通过扩展(具有适当的用户授权)或任何其他方式在页面中注入脚本(特别是如果页面是不是一个安全的)。

我想知道您是否可以在页面加载之前或至少在任何其他脚本执行之前注入并运行脚本,其唯一目的是“保护”原始 XMLHttpRequest 对象(使用类似 mySecureAjax = XMLHttpRequest; 的东西)

您可以在页面上的任何脚本之前执行,但不能保证在另一个扩展注入之前执行。

【讨论】:

  • 那么这意味着....如果有人可以更改 XMLHttpRequest(就像我所做的那样),我的扩展程序可以为我的文件获得不同的结果,即使是作为客户端和服务器的 Chrome,对吧?我通过 AJAX 请求我的文件,如果 XMLHttpRequest 损坏,我可以得到其他任何东西....
  • 或者我在扩展中使用的 XMLHttpRequest 是否只属于扩展上下文,所以它总是安全的? (毕竟,我必须在 dom 中寻找页面的 XMLHttpRequest,因为在内容脚本中更改它不会导致任何结果......?我会测试一下。
  • 酷。 内容脚本XMLHttpRequest不受页面XMLHttpRequest变化的影响。所以,我确实很安全 :) scriptelement.src = chrome.extension.getURL(...) 呢,它会不会被黑客入侵?
  • 您的回答对我帮助很大。关于myScript.src,我稍微编辑了这个问题。对此你有什么要说的吗?
  • 是的,分配 myScript.src 是一种将脚本放入页面的更好方法,并且您还可以避免使用 XMLHttpRequest。是的,页面中的脚本不会影响扩展上下文的 XMLHttpRequest。我不知道您担心“某人”更改此对象,但您的扩展程序可以将 HTML 放在 DOM 上,而无需使用 XMLHttpRequest。
猜你喜欢
  • 2013-12-23
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2020-02-28
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多