Javascript 通过检查元件阻止iframe src变更?

Javascript 通过检查元件阻止iframe src变更?,javascript,html,iframe,Javascript,Html,Iframe,想知道如何通过inspect元素更改网页中的src值来防止获取新数据吗 在网页中,我们在元素中显示视频。视频将在购买后提供给用户。所有视频都存储在中,并通过Vimeo设置进行配置,以便仅通过我们的域可用 问题是, 当用户购买视频时,他/她可以访问的src值并与其他人共享。谁曾经有过这个url,就可以进入我们的网站,做检查元素并更改网页中任何元素的src值,视频将在不购买的情况下加载 如何预防?有没有办法使在页面加载后不加载内容?如果用户需要,还可以编辑html并将元素与url放在一起还是这不是在

想知道如何通过inspect元素更改网页中的
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,我可以动态地