微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

书签更改JSON配置的任意值

如何解决书签更改JSON配置的任意值

我正在努力更改专有的,高度混淆的和防篡改的Web应用程序的UX,因此我无法在服务器级别将其扼杀在萌芽状态。我仅限于浏览器和小书签的沙箱。

页面在两个单独的查询中加载主代码<script preload>)和用户配置(<script defer>)。我希望用户配置中的设置具有与服务器发送的值不同的值。

亲自为我做,我可以在配置尚未出现在浏览器中之前对其进行篡改,但是我还必须使其他用户可靠地进行配置,而不必让他们安装诸如Greasemonkey,fiddler之类的一堆东西等等。

我尝试了两种同样低效的方法

  1. 页面开始加载时,执行此命令并希望我能赢得比赛:
{
   var loadedConf = document.getElementById("user").innerHTML;
   if(typeof loadedConf === "undefined")
   {
      setTimeout(raceReplace,5);
      rantime += 5;
   }
   else
   {
      document.getElementById("user").innerHTML = loadedConf.replace(/arbitraryConfigField":false/,'arbitraryConfigField":"arbitraryConfigValue"');
      console.log("Raced to a finish in " + rantime + "ms")
   }
}
raceReplace()

由于这是一场比赛,因此完全取决于用户单击书签的速度。通过练习,我几乎有50%的时间可以做到!嘿。

  1. 扩展JSON.parse以使其正常返回对象,这与上帝和道格拉斯·克罗克福德的意图相同,但任意键/值除外:

JSON.parse = (text,fn) => {
  const result = parse(text,fn)
  if (result && result.arbitraryConfigField) {
    result.arbiraryConfigField = 'arbitraryConfigValue'
  }
  return result
}

一种更好的方法,但也容易竞争,并可能妨碍常规的JSON.parse性能

(我想知道是否在性能方面,不做任何检查就直接执行text.replace会更好。)

还有第三种方法来等待页面加载,挂入页面并在随后的重新加载(是的,必须重新渲染所有内容)中具有必要的值,而不会造成比赛的麻烦和不确定性? / p>

如果没有设计Chrome扩展程序或与Greasemonkey挂钩的重型大炮,拥有此功能将是令人不安的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。