【问题标题】:Check if extension is installed, and close tab if user removes extension检查是否安装了扩展程序,如果用户删除了扩展程序,则关闭选项卡
【发布时间】:2019-03-22 10:02:14
【问题描述】:

这就是我的网站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);
}

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

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

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

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

【问题讨论】:

  • 我完全被这个解释弄糊涂了。我能想到的最简单的解决方案 - 如果您想隐藏 b.com/somelink 的内容,请关闭该服务器,或删除您那里的所有私人信息。如果任何外部计算机程序无需某种身份验证即可访问它,则所有程序都可以看到它。即使您可以改写您的问题,浏览器扩展程序听起来也是一个糟糕的解决方案,没有人会安装它。
  • @Katana314thanx 回答,我不想花太多时间谈论代码/扩展以外的东西,但要指出您的一些担忧 1 - 有一个身份验证步骤......它完成了通过我的网站,我生成一个过期链接,然后将用户重定向到该链接 (b.com/somelink) 你不能不通过我的网站就打开这个链接 2 - 我在私人/特殊领域提供有价值的服务......它不是对于公共用户,是的,他们会安装它
  • 在大多数浏览器中按F12后,隐私信息仍会在网络跟踪中可见!!

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


【解决方案1】:

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

  1. 私人信息仍然发送到用户的浏览器,用户仍然可以访问。正如iPirat 所暗示的那样,几乎可以在任何浏览器中使用开发人员的工具来查看浏览器接收到的数据。网络选项卡将包含对页面的请求,将显示发送到浏览器的原始 HTML,您要隐藏的信息将在那里可见。没有解决办法,首先不发送信息。

  2. 您的扩展程序失败可能会暴露敏感数据。您说您无法控制显示私人信息的网站,这意味着您无法控制@987654322 @ 包含您的私人信息的元素的 ID。如果那一方的设计者决定将 ID 更改为personal-user-info,那么您的扩展将失败,并且私有数据可见。

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

我会重新考虑你的整个方法。确保私人信息永远不会掌握在用户手中的一种常用方法是让您的前端代码通过您网站上的服务器(@ 987654325@)。您的服务器可以从 b.com 获取信息,并且只包含必须传递给您的用户的信息。

【讨论】:

    【解决方案2】:

    a.com 可以将b.com/somelink 嵌入为 iframe,但除非从扩展程序接收到信号,否则不会显示 iframe。

    a.comJavascript:

    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);
    

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

    【讨论】:

    • 任何带有客户端脚本的解决方案都可能被任何用户破解,即使不是非常敬业的用户。
    【解决方案3】:

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

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

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

    【讨论】:

    • 关于创建自己的浏览器想法的说明;由于自定义浏览器仍在从服务器接收该数据,因此足够专门的用户仍然能够访问敏感信息。这些信息将通过诸如wireshark之​​类的数据包检查实用程序或通过直接检查浏览器进程的内存可见。隐藏信息的唯一真正万无一失的方法是在服务器端进行。
    • 是的,有些高级用户可以进行任何黑客攻击以获取任何数据,但很大一部分用户不能这样做(特别是如果连接是在 SSL 下)。因此,自己的浏览器可以帮助达到预期的效果,这是这种情况下最简单的方法。
    【解决方案4】:

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

    我实际上有一个 Chrome 应用程序,它作为一个门户,可以做你想做的事(没有它的意图)。如果需要,Chrome 应用程序会登录用户并打开不同网站的窗口;有时它会在应用程序本身中显示内容(不向普通用户公开任何 URL)。

    【讨论】:

    • 如果用户使用的不是chrome浏览器怎么办?
    • 这似乎更像是 OP 的问题,因为他用 google-chrome、google-chrome-extension 和 google-chrome-app 标记了这个问题,哈哈……
    猜你喜欢
    • 2011-09-11
    • 2012-12-18
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多