检查是否安装了扩展程序,如果用户删除了扩展程序,则关闭选项卡

时间:2018-10-17 16:36:58

标签: javascript google-chrome google-chrome-extension google-chrome-app

这是我的网站a.com中的工作方式,用户访问我的网站,然后我使用我的帐户与另一个网站b.com中的人交谈,生成链接b.com/somelink并重定向用户到该链接。

这是问题所在,该地址b.com/somelink包含一些我想向访问者隐藏的私人信息...因为我无法控制该网站,所以我无法访问该信息。

因此,我认为最好的选择是浏览器扩展,用户必须在重定向到b.com之前安装扩展。

这是我的简单扩展名:

manifest.json

{
  "name": "extname",
  "version": "1.0",
  "description": "extnameExtension!",
  "manifest_version": 2,
  "permissions": [
    "tabs", "http://*/*", "https://*/*" ,  "webNavigation"
  ] ,

  "content_scripts": [
    {

      "matches": ["*://b.com/*"],
      "js": ["contentscript.js"],
      "run_at": "document_start"
    }
  ]

}

contentscript.js

function fireOnReady() {
    document.getElementById('personal-info').innerHTML = 'some dummy data';
}
if (document.readyState === 'complete') {
    fireOnReady();
} else {
    document.addEventListener("DOMContentLoaded", fireOnReady);
}

工作正常,但是我有两个问题:

1-用户可能会禁用该扩展名并刷新页面b.com/somelink并查看我的个人信息...。因此,如果他们删除了我的扩展名,则我的解决方案是关闭打开浏览器标签的b.com ...有什么办法吗? (仅当他们从我的网站重定向到b.com时,此链接才可用,因此他们不能仅将链接复制/粘贴到新标签页/浏览器中)

2-在我自己的网站中,如何在重定向到b.com之前确保他们已安装扩展程序?

**请不要谈论我解释的场景或其他解决方案,或者...我知道这听起来可能很奇怪,但这不是针对公共用户,而是专门的特殊群体,他们将在必要时安装扩展程序,即时消息有兴趣知道如何使用代码和扩展名来做到这一点,即使我找到了另一个解决方案**

4 个答案:

答案 0 :(得分:5)

您建议的是将用户重定向到包含私人信息的页面,然后在您的扩展程序检测到页面已加载时,从DOM中清除该信息。不管您问有关扩展的两个问题如何,我都不会使用您提出的方法,因为:

  1. 私人信息仍被发送到用户的浏览器,并且仍然可供用户访问。正如iPirat所暗示的,有可能在几乎任何浏览器中使用开发人员的工具来查看浏览器接收的数据。网络标签将包含对该页面的请求,将显示发送到浏览器的原始HTML ,并且您想隐藏的信息将在此处显示。没有解决方案,首先不发送信息。

  2. 扩展程序中的故障可能会泄露敏感数据。您说您不控制显示私人信息的网站,这意味着您无法控制包含您的私人信息的元素的personal-info ID。如果该端的设计者决定将ID更改为personal-user-info,则您的扩展名将失败,并且可以看到私有数据。

    这与代码中的错误无关。您在某个地方输入错误,扩展程序无法运行,并且敏感信息对用户可见。

我会重新考虑您的整个方法。确保私人信息永远不会被用户掌握的一种常用方法是,让前端代码通过您站点上的服务器从第三方站点(b.com)获取所需的信息。 (a.com)。您的服务器可以从b.com获取信息,并且仅包含必须传递给用户的信息。

答案 1 :(得分:1)

a.com可以将b.com/somelink嵌入为iframe,但是除非iframe接收到来自扩展名的信号,否则不会显示iframe。

a.com Javascript:

iframe = document.createElement('iframe');
iframe.src = 'b.com/somelink';
setInterval(() => {
    if (!document.body.classList.contains('extension-token')) window.close();
    else if (!document.body.contains(iframe)) document.body.append(iframe);
    document.body.classList.remove('extension-token');
}, 10000);

a.com内容脚本:

setInterval(() => {
   document.body.classList.add('extension-token');
}, 5000);

这当然不是安全的解决方案。

答案 2 :(得分:0)

正如IPirat和Luis所说,在您的情况下,浏览器扩展不是一种安全的方法。用户可以禁用它,用户可以在调试器的“网络”选项卡中看到原始的html,用户可以运行其他没有扩展名的浏览器来修改页面。您只有两种选择可以继续前进:

  1. 您必须创建服务器端脚本,该脚本将加载b.com/somelink,对其进行修改并将不包含您的私人数据的页面发送给用户。

  2. 您可以创建自己的浏览器。例如,使用Visual Studio为Windows创建带有C#或VBA的Web浏览器非常容易。您可以共享b.com/somelinkmodified,它将在您的浏览器中转换为b.com/somelink,其他任何浏览器都无法访问。因此,您的用户必须安装您的浏览器才能查看生成的页面。比您的浏览器将打开此链接,加载页面,修改并仅显示所需信息

答案 3 :(得分:-2)

您可以简单地要求用户在您的网站上安装Chrome应用,然后在Chrome应用上执行代码(获取链接,发送重定向)。您可以将Chrome应用本质上作为前端(甚至可以复制HTML),并在那里进行所有逻辑处理。由于您的Chrome应用是执行重定向的应用,因此您将完全控制这些信息。实际上,您的Chrome应用可以启动不带地址栏的窗口,而您可以执行其他一些有趣的操作。您甚至可以在内部进行http调用并吐出响应html;这样,您就完成了隐藏URL链接中的参数的操作(假设您担心个人信息会在那里)。

我实际上有一个Chrome应用程序,它充当门户网站,可以满足您的需求(并非故意)。 Chrome应用会在需要时将用户登录并打开窗口到其他网站;有时,它会按字面意义显示应用程序本身中的内容(而不会向普通用户公开任何URL)。