Javascript 通过检查元件阻止iframe src变更?
想知道如何通过inspect元素更改网页中的Javascript 通过检查元件阻止iframe src变更?,javascript,html,iframe,Javascript,Html,Iframe,想知道如何通过inspect元素更改网页中的src值来防止获取新数据吗 在网页中,我们在元素中显示视频。视频将在购买后提供给用户。所有视频都存储在中,并通过Vimeo设置进行配置,以便仅通过我们的域可用 问题是, 当用户购买视频时,他/她可以访问的src值并与其他人共享。谁曾经有过这个url,就可以进入我们的网站,做检查元素并更改网页中任何元素的src值,视频将在不购买的情况下加载 如何预防?有没有办法使在页面加载后不加载内容?如果用户需要,还可以编辑html并将元素与url放在一起还是这不是在
src值来防止获取新数据吗
在网页中,我们在元素中显示视频。视频将在购买后提供给用户。所有视频都存储在中,并通过Vimeo设置进行配置,以便仅通过我们的域可用
问题是,
当用户购买视频时,他/她可以访问
的src
值并与其他人共享。谁曾经有过这个url,就可以进入我们的网站,做检查元素并更改网页中任何元素
的src
值,视频将在不购买的情况下加载
如何预防?有没有办法使
在页面加载后不加载内容?如果用户需要,还可以编辑html并将元素
与url放在一起还是这不是在网页中实施付费视频的正确方法?
我完全被这一点困住了。
非常感谢您的所有意见
更新:
- 我可以使用google drive进行此选项吗?使用GoogleDriveAPI,我可以动态地访问每个用户帐户
不可能防止这种情况发生。我不确定您是否能够从外部检测到跨源安全性带来的变化,除非Vimeo有一个通过跨窗口消息传递的API,您可以检查视频ID——在这种情况下,最好让页面定期验证帧内的视频ID
但即便如此,对于一个稍微高级一点的“黑客”来说,这也不会有任何问题。您甚至可以通过创建一个本地Web服务器来击败整个系统,该服务器提供一个包含所需IFrame的HTML文件,并在hosts文件中设置一个条目,将您的域指向127.0.0.1。。。或者只需使用NoScript扩展并禁用任何正在检查您端视频ID的功能
底线是,一旦您通过以太发送Vimeo URL,您就失去了对它的控制,仅此而已。除了从您自己的服务器而不是Vimeo流式传输视频之外,您无法做任何事情。在Vimeo中,您可以实施您自己的访问控制系统,例如,在验证他们是否正确访问内容后,创建仅对该特定用户和时间有效的一次性令牌。无法防止这种情况发生。我不确定您是否能够从外部检测到跨源安全性带来的变化,除非Vimeo有一个通过跨窗口消息传递的API,您可以检查视频ID——在这种情况下,最好让页面定期验证帧内的视频ID
但即便如此,对于一个稍微高级一点的“黑客”来说,这也不会有任何问题。您甚至可以通过创建一个本地Web服务器来击败整个系统,该服务器提供一个包含所需IFrame的HTML文件,并在hosts文件中设置一个条目,将您的域指向127.0.0.1。。。或者只需使用NoScript扩展并禁用任何正在检查您端视频ID的功能
底线是,一旦您通过以太发送Vimeo URL,您就失去了对它的控制,仅此而已。除了让视频从您自己的服务器而不是Vimeo流式传输外,您没有其他办法,在Vimeo中,您可以实现自己的访问控制系统,例如,创建仅对该特定用户和时间有效的一次性令牌,验证他们是否有权访问内容后。您的问题是,您正试图使用第三方主机并创建不存在的身份验证
它不会一直工作,但您可以尝试设置一个每秒运行几次的setInterval计时器,如果url更改为意外值,您可以强制页面重定向到未经授权的页面
如果你这样做的话,我建议首先通过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
}
您的问题是,您试图使用第三方主机并创建不存在的身份验证
它不会一直工作,但您可以尝试设置一个每秒运行几次的setInterval计时器,如果url更改为意外值,您可以强制页面重定向到未经授权的页面
如果你这样做的话,我建议首先通过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
}
如果您不希望有人更改iframe的“src”,可以将“src”属性设置为“writable:false”,这样第三方就无法更改它
例如:
var element = document.getElementById('iframe');
Object.defineProperty(element, 'src', {
writable: false
});
另外,有人可以通过调用element.setAttribute('src',value)
来更改src
,因此您可以通过重写setAttribute方法来防止这种情况
例如:
var set = element.setAttribute;
element.setAttribute = function(attr, val) {
//do whatever
//set.call(this, attr, val);
};
如果您不希望有人更改iframe的“src”,可以将“src”属性设置为“writable:false”,这样第三方就无法更改它
例如:
var element = document.getElementById('iframe');
Object.defineProperty(element, 'src', {
writable: false
});
另外,有人可以通过调用element.setAttribute('src',value)
来更改src
,因此您可以通过重写setAttribute方法来防止这种情况
例如:
var set = element.setAttribute;
element.setAttribute = function(attr, val) {
//do whatever
//set.call(this, attr, val);
};
如果没有iframe
,您至少不能将视频直接嵌入页面中,我看不到任何方法可以防止这种情况。一旦他们有了嵌入的src,你就可以很容易地绕过它,就像你所说的那样,不用使用iframe
有办法绕过它??!!!我不知道,如果是通过服务器从Vimeo流式传输,至少会困难得多,你可以对请求进行用户身份验证。但是看起来Vimeo除了iframe
embed之外不支持任何东西。更新了问题:-我可以使用google drive来实现这个选项吗?使用GoogleDriveAPI,我可以动态地