伪造用户代理用于iframe

14

我是Javascript的新手。我找到了这段使用Javascript更改用户代理的代码。

var __originalNavigator = navigator;
navigator = new Object();
navigator.__defineGetter__('userAgent', function () {
    return 'Custom';
});

var iframe='<iframe id="frame" name="widget" src ="http://www.useragentstring.com/" width="100%" height="400" marginheight="0" marginwidth="0" frameborder="no" scrolling="no"></iframe>';        

document.write("User-agent header sent: " + navigator.userAgent + iframe);   

这段代码可以成功返回伪造的用户代理,但是我该如何为 iframe 设置相同的伪造用户代理呢?

这里是我正在做的 jsfiddle 示例:http://jsfiddle.net/ufKBE/1/


document.getElementById("frame").navigator怎么样? - mplungjan
谢谢,但你能详细解释一下吗?我的JavaScript技能太差了。 - MANnDAaR
2
@mplungjan - 框架没有导航器属性。我认为这实际上是不可能的。 - PhonicUK
2
您正在更改navigator.userAgent,这只是JavaScript属性。实际上,您并没有将带有该用户代理字符串的标头发送到任何地方。您可以使用setRequestHeader(https://dev59.com/5HM_5IYBdhLWcg3wslVW)为ajax调用设置标头,但仅追加UA字符串。我怀疑是否有一种方法可以修改iframe的标头。 - undefined
如果窗口有一个可读/可写的导航器,那么 iframe 也可以有一个,不是吗? - mplungjan
2个回答

5

我已经在<载入不同用户代理的iframe内容>上回答了相同的问题。

为方便起见,我在此处复制并粘贴答案:

首先,您必须创建一个函数来更改用户代理字符串:

function setUserAgent(window, userAgent) {
    if (window.navigator.userAgent != userAgent) {
        var userAgentProp = { get: function () { return userAgent; } };
        try {
            Object.defineProperty(window.navigator, 'userAgent', userAgentProp);
        } catch (e) {
            window.navigator = Object.create(navigator, {
                userAgent: userAgentProp
            });
        }
    }
}

那么你需要针对 iframe 元素进行操作:
setUserAgent(document.querySelector('iframe').contentWindow, 'MANnDAaR Fake Agent');

您可以为iframe设置一个ID,然后以该ID作为目标,而不是针对页面上所有的iframe元素进行操作。

这在我当前使用的Windows Google Chrome版本78.0.3904.108(官方构建)(64位)中无法正常工作。 - Ryan
@Ryan,它不应该与任何具有增强安全功能的现代浏览器一起使用。 - Aero Wang
@AeroWang 有关于那个说法的任何来源吗? - Francisco Hanna
我使用了'user-agent',例如Object.defineProperty(window.navigator, 'user-agent', userAgentProp);。它有效。 - Mahmonir Bakhtiyari

2
这不是将用户代理切换到伪装的方式。 window.navigator = {userAgent:Custom_User_Agent} 只是一个 JavaScript 执行,当您刷新页面时,无论它是在窗口还是 iframe 中,它都会被简单地忽略,然后发送给服务器的默认用户代理。如果您真的想切换您的用户代理,必须处理浏览器设置。一些浏览器允许在其设置中进行此操作,而另一些则包括用户代理切换器或支持某种插件来执行此操作。

http://www.howtogeek.com/113439/how-to-change-your-browsers-user-agent-without-installing-any-extensions/

"备选方案是,您也可以尝试从服务器访问网站或构建自己的网络访问应用程序。这些方式,您可以自由修改标头或使用自己定制的用户代理。

另一种方法是使用AJAX,但当然会受到跨域政策的限制。"


4
这并没有回答问题。原问题是关于如何在代码中伪造用户代理,特别是如何为iframe设置用户代理。你提供了有关用户如何手动更改其浏览器的用户代理的信息。 - Chris Halcrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接