ZBLOG

浏览器有什么插件可以找出页面中所有的window.location对象,请注意,window.location不一定以明文形式存在,可能是赋值后使用

要找出页面中所有的 window.location 对象(包括直接使用、变量引用或动态赋值),可以通过浏览器开发者工具结合插件或手动调试方法实现。以下是几种解决方案:


1. 使用 Chrome 开发者工具(无需插件)

方法一:全局搜索

  1. 打开开发者工具(F12Ctrl+Shift+I)。
  2. 进入 Sources 面板,按 Ctrl+Shift+F(Windows)或 Cmd+Opt+F(Mac)全局搜索。
  3. 输入正则表达式:
    
    (window\.location|location\.[a-zA-Z]+|[\w]+\.location\.[a-zA-Z]+)
    
    这会匹配所有形式的 location 调用(如 window.location.hrefvar x = location.pathname)。

方法二:断点调试

  • Sources 面板的 Event Listener Breakpoints 中勾选 Location > hashchange/popstate,当 URL 被修改时会触发断点。

2. Chrome 插件推荐

(1) Requestly

  • 功能:拦截和修改 HTTP请求,支持脚本注入。
  • 用法
    1. 安装 Requestly
    2. 注入以下脚本到目标页面:
      
      console.log("Current URL:", window.location.href);
      // Hook location属性变更
      Object.defineProperty(window, 'location', {
      set: function(value) { console.trace("Location modified:", value); return value; },
      get: function() { return this._location; }
      });
      

(2) Tampermonkey + Custom Script

  • 功能:通过用户脚本监控 location
  • 示例脚本: “`javascript // ==UserScript== // @name Track Location Changes // @description Logs all access/modifications to window.location // ==/UserScript==

(function() {

  const originalLocation = window.location;
  Object.defineProperty(window, 'location', {
      get: function() {
          console.trace('Location accessed:', originalLocation.href);
          return originalLocation;
      },
      set: function(value) {
          console.error('Location modified:', value);
          originalLocation.href = value;
      }
  });

})();


---

### **3. JavaScript Proxy API(动态监听)**
在控制台直接运行以下代码,监听所有对 `location`的访问和修改:
```javascript
const locationProxy = new Proxy(window.location, {
    get(target, prop) {
        console.log(`Reading location.${prop}`, target[prop]);
        return target[prop];
    },
    set(target, prop, value) {
        console.warn(`Modifying location.${prop} to ${value}`);
        target[prop] = value;
        return true;
    }
});
window.location = locationProxy; // Override原生对象

4. XHR/Fetch API Hook

如果 URL通过异步请求动态获取,可以劫持相关API:

// Hook Fetch API
const originalFetch = window.fetch;
window.fetch = async (...args) => {
    const response = await originalFetch(...args);
    if (args[0].includes('/api/update-url')) {
        console.log("Fetch modifying URL:", args);
    }
    return response;
};

注意事项

  • 跨域限制:部分页面的安全策略可能阻止脚本注入。
  • 性能影响:频繁的 console.log可能降低页面性能。

如果需要更专业的分析(如混淆代码中的动态调用),建议结合反混淆工具(如 de4js)或AST解析工具。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24049

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?