gpt4 book ai didi

javascript - 保护原始 JSON 数据不被复制

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:56 25 4
gpt4 key购买 nike

我正在使用 Node.js 和 Mongo DB 创建一个应用程序,并使用 Swig 渲染 View 。我有一个包含企业名称、地址和地理位置数据的数据库,该数据库正在使用图钉绘制在 Google map 上。

我想阻止用户使用查看源代码、Firebug、Chrome 开发工具等轻松复制原始 JSON 数据。

我并不追求银行级的安全性,只是想让大多数用户难以放弃。

我有两种将 JSON 包传递到浏览器的途径:

1) 使用Swig,将JSON包直接传递给 View 。问题是简单的 View 源将显示 JSON。

2) 通过 AJAX 调用请求数据。在这种情况下,可以使用 Chrome 开发工具轻松访问数据。

我有什么选择?

最佳答案

Base-64 对字符串进行编码。
然后你可以在 JavaScript 中对它进行 base64 解码。
当然,这应该使它完全不可读,但没有真正的安全性。
而且速度很快。

您需要注意 UTF-8 字符(例如德语 äöüäÖÜ 或法语 èéàâôû)

例如在 JavaScript 中就像这样:

var str = "äöüÄÖÜçéèñ";
var b64 = window.btoa(unescape(encodeURIComponent(str)))
console.log(b64);

var str2 = decodeURIComponent(escape(window.atob(b64)));
console.log(str2);

示例:

 var imgsrc = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(markup)));
var img = new Image(1, 1); // width, height values are optional params
img.src = imgsrc;

更安全的变体:
返回加密的base64编码的JSON,加上解密算法,在服务器端对它们进行base64编码,将其位移几位,通过ajax返回,然后对网页上的字符串进行de-bitshift,将其传递给eval,这将为您提供解密函数,然后解密加密的base64字符串,然后对该字符串进行base-64解码。

但是在 chrome 调试控制台上只需要几秒钟就可以解密,我确实解密过一次这样的事情,我认为在 codecanyon 上可以免费获得“Tabs”脚本; (不要为选项卡烦恼,它们是过时的软件,最好花时间自己做);)

我想你现在在这里发现了这一点http://www.slidetabs.com/ ,但不知道“加密”方法是否还在。

此外,您还可以在 JavaScript 中转义字符串,如下所示:

var _0xe91d=["\x28\x35\x28\x24\x29\x7B\x24\x2E\x32\x77\x2E

...


x5F\x63\x6F\x6E\x74\x5F\x64\x75\x72\x7C\x76\x5F\x74\x61\x62\x73\x5F\x61\x6C\x69\x67\x6E\x7C\x76\x5F\x74\x61\x62\x73\x5F\x64\x75\x72\x7C\x76\x5F\x73\x63\x72\x6F\x6C\x6C\x7C\x63\x6F\x6E\x74\x5F\x61\x6E\x69\x6D\x7C\x63\x6F\x6E\x74\x5F\x66\x78\x7C\x74\x61\x62\x5F\x66\x78\x7C\x72\x65\x70\x6C\x61\x63\x65\x7C\x62\x61\x6C\x69\x67\x6E\x7C\x61\x6C\x69\x67\x6E\x5F\x7C\x75\x6E\x6D\x6F\x75\x73\x65\x77\x68\x65\x65\x6C\x7C\x73\x77\x69\x74\x63\x68\x7C\x64\x65\x66\x61\x75\x6C\x74\x7C\x6A\x51\x75\x65\x72\x79","","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x72\x65\x70\x6C\x61\x63\x65","\x5C\x77\x2B","\x5C\x62","\x67"]
;eval(function (_0x173cx1,_0x173cx2,_0x173cx3,_0x173cx4,_0x173cx5,_0x173cx6){_0x173cx5=function (_0x173cx3){return (_0x173cx3<_0x173cx2?_0xe91d[4]:_0x173cx5(parseInt(_0x173cx3/_0x173cx2)))+((_0x173cx3=_0x173cx3%_0x173cx2)>35?String[_0xe91d[5]](_0x173cx3+29):_0x173cx3.toString(36));} ;if(!_0xe91d[4][_0xe91d[6]](/^/,String)){while(_0x173cx3--){_0x173cx6[_0x173cx5(_0x173cx3)]=_0x173cx4[_0x173cx3]||_0x173cx5(_0x173cx3);} ;_0x173cx4=[function (_0x173cx5){return _0x173cx6[_0x173cx5];} ];_0x173cx5=function (){return _0xe91d[7];} ;_0x173cx3=1;} ;while(_0x173cx3--){if(_0x173cx4[_0x173cx3]){_0x173cx1=_0x173cx1[_0xe91d[6]]( new RegExp(_0xe91d[8]+_0x173cx5(_0x173cx3)+_0xe91d[8],_0xe91d[9]),_0x173cx4[_0x173cx3]);} ;} ;return _0x173cx1;} (_0xe91d[0],62,284,_0xe91d[3][_0xe91d[2]](_0xe91d[1]),0,{}));

然后您可以将字符串带回来,如下所示:

"\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65".toString()

但是对于一个中等编码员(像我一样)来说,要弄清楚系统并解密所有这些组合的数据将只需要appx。 15-30分钟,(实验发现,来自codecanyon-try)。

这样的事情是否值得你花费时间是值得怀疑的,因为像我这样的人对你的“加密”进行逆向工程所花费的时间比你“编码”它所花费的时间要少。

请注意,如果您将“\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65”这样的字符串放入应用程序中,则可能会在某些病毒扫描程序(McAffee、TrendMicro、Norton 等,通常的嫌疑人)上触发错误警报。

您还可以将 JSON 字符串划分为 JSON 字符串 block 的数组,从而使其更难解密(也许根据特定系统旋转数组中的序列也可能有所帮助)。

您还可以将字符串分解为字符数组:

var x = ['a', 'b', 'c'];

然后你可以把它带回来,就像

console.log(x.join(""));

您还可以反转字符串,并将其放入数组中(amCharts 就是这样做的)。
然后你把它带回来

x.reverse().join("");

最后一个对于 utf-8 可能比较棘手,因为您需要正确反转“Les Misérables”等字符串(另请参阅 thisthis )

关于javascript - 保护原始 JSON 数据不被复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26801781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com