【问题标题】:Detecting user tampering with DOM检测用户篡改 DOM
【发布时间】:2011-06-15 11:24:40
【问题描述】:

我编写了一个网络应用程序,它使用侧面的广告横幅来支持免费帐户。问题是,由于广告是在其自己的

中加载的,因此在任何现代浏览器中进入开发人员/调试控制台并删除 div 或使用 CSS 覆盖将广告大小调整为 0px 相对容易(用户可能会这样做在应用程序工作区中获得更多不动产)。为了防止这种情况,我正在考虑定期检查带有广告的 div 的属性是否发生了变化(包括 CSS 样式),如果发生了变化,请重新加载页面。由于我依赖于画布元素进行某些绘图,因此重新加载对用户来说会比较烦人,因为它会清除画布,所以除非广告被篡改,否则我不想这样做。

我看到了一些关于跟踪 DOM 更改的类似问题,人们建议使用突变事件。但是,根据答案,似乎并非所有浏览器都提供支持(再说一次,我看到的线程是 2008 年和 2009 年的,所以从那时起情况可能会发生变化)。

我正在考虑的另一种选择是在页面完成加载后读取带有广告的 div 的 offsetWidth、offsetHeight、offsetTop、offsetLeft,并定期将它们与当前值进行比较(您可以做的不多如果无法移动,请让 div 消失)。

你们有什么建议?

【问题讨论】:

  • 如果你不能篡改 DOM,Web 开发就不会那么有趣了。
  • 如果用户这样做是为了获得更多的空间,你能阻止(固定可用区域的宽度)消除这个原因吗?
  • 感谢@Don,这就是我最终所做的。如果广告在那里,我有几个 div 与它们将占用的大小对齐,所以即使用户删除了广告,除非 js 代码也被修改或用户修改了多个其他 div 并且没有之后调整窗口大小。虽然其他人提出了非常有效的观点,但我不同意他们已经回答了这个问题。如果我 StackOverflow 让我接受 cmets 作为解决方案,我会接受你的评论 :)
  • 很高兴能帮上忙!我发表评论是因为我认为我在技术上没有回答您的问题。

标签: javascript html css dom


【解决方案1】:

你永远不会阻止那些对 DOM 检查器足够熟悉的人这样做。这甚至不值得猫捉老鼠的游戏。如果不小心访问了 DOM 检查器,99.999% 的用户可能会致电技术支持。

【讨论】:

  • +1 如果你可以通过这种方式篡改DOM,你也可以操纵试图检测操纵的Javascript。
  • +1 你甚至不应该称之为“篡改”——你为用户提供了 DOM,他们可以在他们的客户端中做他们喜欢的事情。就像这些人说的那样 - 很少有用户会认为删除广告是可能的。
  • 没错,但是调整 DOM 需要几秒钟(它是最外层的 div 之一),调整 javascript 实际上需要用户研究代码(这通常不值得为无论如何,广告并不是那么具有侵入性)。我知道完全防止这种情况是不可能的,但我希望添加一个简单的检查来防止明显的利用。
  • 所以检查边界,然后他们会将其移回 z 顺序。然后,当您检查它们是否会将不透明度设置为零时。我所说的“他们”不是指任何人。 :) 我个人认为这是浪费时间,除非您是 Doubleclick 或 Google。
【解决方案2】:

如果访问者使用带有 Adblock 的 Firefox,您的横幅将永远不会出现在页面中,因此不会发送突变事件。您可以查看样式属性并重新加载页面,但不会使广告出现。不断重新加载的页面会惹恼用户,因此他们会离开。

如果你没问题,那就去吧。否则,请意识到任何禁用您的广告的人无论如何都不会响应它,那有什么意义呢?

【讨论】:

  • 谢谢@RobG,我什至没有想到 Adblock,你说得对,突变事件在这种情况下不起作用。至于禁用广告,关键不是我希望他们点击它,关键是如果摆脱​​广告比信任他们更容易,他们就没有动力获得我的应用程序的付费版本卡信息。
猜你喜欢
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2015-07-25
相关资源
最近更新 更多