我们有一个客户希望他们的内容在 Google TV 上(通过 Chrome 浏览器),但在法律上被限制在“常规网络”上允许它。所以我们想通过 Javascript 检测 Google TV 浏览器,如果不是,则禁止播放内容。
第一个想法是检查用户代理字符串,但显然他们不喜欢这样,因为用户在他们的网络浏览器上更改他们的用户代理字符串太容易了,所以它假装是谷歌电视浏览器。
还有什么我们可以检查的更难(或至少不那么明显)伪造的东西吗?我知道如果有人足够努力,任何解决方案都可能被破解,这没关系。
我们有一个客户希望他们的内容在 Google TV 上(通过 Chrome 浏览器),但在法律上被限制在“常规网络”上允许它。所以我们想通过 Javascript 检测 Google TV 浏览器,如果不是,则禁止播放内容。
第一个想法是检查用户代理字符串,但显然他们不喜欢这样,因为用户在他们的网络浏览器上更改他们的用户代理字符串太容易了,所以它假装是谷歌电视浏览器。
还有什么我们可以检查的更难(或至少不那么明显)伪造的东西吗?我知道如果有人足够努力,任何解决方案都可能被破解,这没关系。
您可能可以做一些事情,因为您只想确保检测到谁没有使用 GoogleTV 浏览器。当然,这些可以被欺骗,但它们比仅使用不同的用户代理字符串要困难得多。
基本上,这个想法是测试某些 JavaScript 对象支持(有关一些想法,请参阅此页面:http ://www.javascriptkit.com/javatutors/objdetect3.shtml )。这方面的一个例子是测试是否存在window.opera
表明浏览器确实是 Opera 而绝对不是 GoogleTV。
为此,我编写了一个小小提琴示例,它不能被所有现代浏览器中的用户代理切换伪造,并且需要更复杂的机制来绕过。我进行了测试,它确实在 Google TV 上通过了。
你能想到的任何东西,尤其是在 JavaScript 中,都将很容易被伪造,因为你可以轻松地(使用控制台)粘贴代码,将任何值注入任何位置。
我认为没有比谷歌建议的更好的方法了:
var userAgent = navigator.userAgent;
function isGoogleTvBrowser(useragent) {
return Boolean(useragent.match(/(Large Screen)|GoogleTV/i));
}
虽然很明显,用户代理字符串很容易被伪造。