想知道如何通过检查元素更改网页中的<iframe> src value
来阻止获取新数据?
在网页中,我们正在<iframe> element
中展示视频。购买后,用户可以使用视频。所有视频都存储在Vimeo中,并通过配置的Vimeo设置,只有通过我们的域名才能使用。
问题是,
当用户购买视频时,他/她可以访问src
<iframe>
的值,并可以与他人分享。谁拥有该网址只需访问我们的网站并执行检查元素并更改网页中任何src
的{{1}}值,视频将无需购买即可加载。
如何防止这种情况?有没有办法让<iframe> element
在页面加载后不加载内容?此外,如果用户想要编辑html并将<iframe>
与url放在一起。 或者这不是在网页上实施付费视频的正确方法吗?
我完全陷入困境。 许多人感谢您的所有投入。
答案 0 :(得分:2)
无法阻止这种情况发生。我不确定你是否可以检测到来自外部的变化,因为跨源安全性,除非Vimeo通过跨窗口消息传递API,你可以检查视频ID - 在这种情况下,你可以做的最好的事情是让页面定期验证帧内的视频ID。
但即便如此,对于一位稍微高级的“黑客”来说,这也不是什么问题。甚至可以通过创建一个本地网络服务器来打败整个系统,该网络服务器为包含所需IFrame的HTML文件提供服务,并在hosts文件中设置一个条目,将您的域指向127.0.0.1 ...或者只使用NoScript扩展并禁用无论如何检查你的视频ID。
一句话,一旦你通过以太网发送Vimeo URL,你就失去了对它的控制权就是这样。除了从您自己的服务器而不是Vimeo流式传输视频之外,您无能为力,您可以在其中实施自己的访问控制系统,例如:在验证他们是否有权访问内容后,创建仅对此特定用户和时间有效的一次性令牌。
答案 1 :(得分:1)
您的问题是您正在尝试接收第三方主机并创建不存在的身份验证。
它不会一直工作,但您可以尝试设置一个每秒运行几次的setInterval计时器,如果网址更改为意外值,则可能会强制该页面重定向到未经授权的页面。
如果你走这条路线我会建议最初通过javascript加载iframe元素,而不是标记,所以如果用户禁用javascript,他们根本无法查看任何视频
window.setInterval(function(){
var frame = document.getElementById("frame");
if(frame.src !== expectedSource){
window.location.href = "unauthorized.html" // or something like that
}
}, 300);
// load iframe
window.onload = function(){
var frame = document.createElement("iframe");
document.body.insertBefore(frame, container); // container implies an existin DOM element
frame.src = expectedSource; // you will need some way to get the expected source and load it
}
答案 2 :(得分:0)
如果您不希望有人更改您的iframe的“src”,您可以将“src”属性设为“writable:false”,这样第三方就无法更改。
示例:
var element = document.getElementById('iframe');
Object.defineProperty(element, 'src', {
writable: false
});
此外,有人可以通过调用src
来更改element.setAttribute('src', value)
,因此您可以通过覆盖setAttribute方法来阻止此操作。
示例:
var set = element.setAttribute;
element.setAttribute = function(attr, val) {
//do whatever
//set.call(this, attr, val);
};