【问题标题】:How Easy Is It To Beat This Javascript Preventative Measure击败这个 Javascript 预防措施有多容易
【发布时间】:2010-11-12 21:32:57
【问题描述】:

我正试图阻止用户禁用样式。(我有充分的理由这样做,所以请不要发布有关可访问性的帖子,因为我的网站 99.99% 是完全可访问的。只是试图阻止 0.1%我的页面。如果你必须知道这是一个付费的网络课程,我不希望人们窃取......很容易)。

我正在使用 Jquery:

function cssCheck() {
  if( ! $('#cssenabledcheck').is(':hidden') ) {
    window.location.href = "www.somerandompage.com";
  }
}

var styleCheck = setInterval(cssCheck, 500);

cssenebledcheck 是一个空的 div,样式设置为隐藏。逻辑是,如果您禁用样式,则 div 将显示,并且样式检查将失败,从而将用户重定向到告诉他们启用样式的页面。即使在旧电脑上,它也是惊人的非内存密集型,即使它每半秒持续运行一次。

我的问题是,一个人重写(注入)styleCheck 变量,从而击败我的支票有多容易?老实说,我对黑客技术知之甚少,因此我们将不胜感激。

【问题讨论】:

  • 您知道这可以通过先关闭 JavaScript 和 然后 CSS 轻松绕过?
  • 实际上,我在页面加载时检查了另一个变量,以查看是否启用了 js。并且由于您必须重新加载页面以禁用 js,它会失败并强制他们重新启用 javascript。
  • 你不需要重新加载页面来禁用JS。我现在在 Firefox 中做到了。
  • 如果他们知道自己在做什么,并意识到函数指针存储为styleCheck,只需一秒钟即可覆盖它。
  • 我相信你的理由是“好的”,但我有充分的理由永远不会去任何试图劫持我的浏览器的网站。不管你的理由是什么:重新考虑一下。尤其是因为您无论如何都无法阻止人们关闭您的 CSS。

标签: javascript jquery coding-style code-injection


【解决方案1】:

就像打开firebug和发布一样简单

clearInterval(styleCheck);

你不应该将setInterval返回的值分配给一个变量,所以它是不可清除的。但是他们可以重写cssCheck方法。

这反过来可以通过使用匿名函数来避免

setInterval( function(){...}, 500);

但他们可以完全禁用 javascript,并且对于这种情况无能为力..

【讨论】:

  • 无需firebug,在任意浏览器地址栏中输入javascript:clearInterval(styleCheck)即可
  • @Gaby - for(var i=0; i< 10000; i++) clearInterval(i); 也会清除匿名 :) ID 可能非常低。
  • 无法在上述匿名函数中添加启用 js 的检查,并在页面加载时进一步检查?或者该功能仍然可以被操纵。
  • 或者只是重新声明您在匿名函数中使用的任何函数——甚至可以说$ = function() { return 0; } 完全禁用 JQuery。 Javascript 就是这么酷。
  • @Christian - 摆脱 $ 不会禁用 jQuery,如果编写正确则不会:)
【解决方案2】:

这很容易(例如使用greasemonkey)。如果你真的想要隐藏某些东西,它不应该出现在页面上,句号。即使它是隐藏的,如果您转到浏览器的“查看源代码”选项,它仍然在源代码中。通过在浏览器上禁用 JavaScript 也可以轻松绕过您在此处拥有的内容。

我认为正确的方法是在您需要检索隐藏内容时对服务器进行 Ajax 调用,或者转到隐藏内容的其他页面。

【讨论】:

  • 我的内容受 php 会话保护,但我不希望人们轻易禁用样式,然后复制并粘贴所有付费内容。
【解决方案3】:

我可以使用 firebug 或greasemonkey 轻松禁用预防措施。任何形式的安全性都不能指望 JavaScript。

【讨论】:

    【解决方案4】:

    除了禁用 JavaScript 之外,还可以使用 Firebug 覆盖任何全局变量,例如 styleCheck

    【讨论】:

    • 所以真的没有可靠的方法来解决这个问题吗?
    • styleCheck 可能不是全局变量。 @jimmy,把它放在一个隐藏的范围内(最好是一些匿名函数)
    【解决方案5】:

    必须假定在浏览器中运行的任何内容都在用户的控制之下。使用 Firebug 或 GreaseMonkey 甚至是小书签来更改 javascript 变量或删除 javascript 函数是微不足道的,甚至更容易更改样式(您可以指定将覆盖网站样式表的个人样式表)。

    如果您确实需要保护您的内容不被复制,则必须将其显示在 Flash 等插件中,在该插件中,环境受到更严格的控制。

    【讨论】:

    • 我实际上是开始用 Flash 制作课程的……但是,这很痛苦。哦,回到土坯土地。
    • 您可以将内容放入受版权保护的 PDF 中。这些绝对可以破解,但它会阻止随意的“小偷”。或者您可以动态生成包含文本的图像,尽管这对于想要增加字体大小的用户来说可能相当痛苦。
    【解决方案6】:

    非常容易。在任何 JS 控制台中,输入:

    cssCheck = function() {}
    

    一个更健壮的版本是将它放在一个难以覆盖的闭包中。

    (function() {
      function cssCheck() {
        if( ! $('#cssenabledcheck').is(':hidden') ) {
          window.location.href = "www.somerandompage.com";
        }
      }
    
      var styleCheck = setInterval(cssCheck, 500);
    })();
    

    但关闭 javascript,甚至 curlwget,或右键单击查看源代码仍然很容易被击败。没有一种可靠的方法来做你想做的事。

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 2019-01-04
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多