【问题标题】:Chrome Extension Breaks HTTPSChrome 扩展破坏了 HTTPS
【发布时间】:2017-02-23 08:52:53
【问题描述】:

我编写了一个简单的 Chrome 扩展程序,在该页面中配置了员工 ID 和字段名称以触发焦点。即:idfieldName

当用户在该字段内单击时,ajax 用于将用户 ID 发送到本地 Web 服务器。

$('[name=' + fieldName + ']').focus(function () {
    console.log ( "FOCUS - "  + id + ' ' + fieldName)
    $.ajax({ url : 'https://LOCAL_IP_ADDRESS/staff.php?staffID=' + id });
});

该扩展程序可以在任何托管网页上运行,LOCAL_IP_ADDRESS 是我们本地网络服务器的内部 IP 地址,用户 PC 也可以访问。

没有从页面发送来自站点的数据,只有来自扩展配置的值。

以上工作正常。不过……

我加载了一个 HTTPS 网站,Chrome 报告它是安全的。

我在相关字段中单击,staffID 被发送到我们的本地网络服务器。然而,该网站现在报告为不安全。

我能做些什么来阻止这种情况发生吗?

谢谢

【问题讨论】:

    标签: jquery google-chrome-extension https


    【解决方案1】:
    1. 声明一个event page

      "background": {
          "scripts": ["jquery.js", "eventPage.js"],
          "persistent": false
      },
      
    2. 从您的内容脚本中将消息中的 id 发送到活动页面:

      $('[name=' + fieldName + ']').focus(() => chrome.runtime.sendMessage({id}));
      
    3. 事件页面做AJAX请求:

      chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
          $.ajax({url : 'https://LOCAL_IP_ADDRESS/staff.php?staffID=' + msg.id});
      });
      

    您可以选择将 AJAX 请求结果异步发送回内容脚本:

    • 内容脚本:

      $('[name=' + fieldName + ']').focus(() => {
          chrome.runtime.sendMessage({id}, status => console.log(status))
      });
      
    • 活动页面:

      chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
          $.ajax({
              url : 'https://LOCAL_IP_ADDRESS/staff.php?staffID=' + msg.id,
              complete: xhr => sendResponse(xhr.status),
          });
          return true; // leave the channel open for sendResponse
      });
      

    【讨论】:

    • 谢谢,我会尽快测试
    • 谢谢,我正在考虑设置它。我目前在focusout 时运行第二个 ajax 可以这样做吗?
    • 当然:只需在内容脚本中烹制整个 url 并在消息中发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-10-12
    • 2011-10-15
    • 2022-08-19
    • 2013-01-18
    相关资源
    最近更新 更多