Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保护原始JSON数据不被复制_Javascript_Json_Node.js_Security_Swig Template - Fatal编程技术网

Javascript 保护原始JSON数据不被复制

Javascript 保护原始JSON数据不被复制,javascript,json,node.js,security,swig-template,Javascript,Json,Node.js,Security,Swig Template,我正在使用Node.js和mongodb创建一个应用程序,使用Swig呈现视图。 我有一个包含商业名称、地址和地理位置数据的数据库,这些数据正在用PIN码绘制到谷歌地图上 我想阻止用户使用view source、Firebug、Chrome开发工具等轻松复制原始JSON数据 我不追求银行级安全,只是想让大多数用户难以放弃 我有两种将JSON包传送到浏览器的方法: 1) 使用Swig,将JSON包直接传递给视图。问题是一个简单的视图源将显示JSON 2) 通过AJAX调用请求数据。在这种情况下,可

我正在使用Node.js和mongodb创建一个应用程序,使用Swig呈现视图。 我有一个包含商业名称、地址和地理位置数据的数据库,这些数据正在用PIN码绘制到谷歌地图上

我想阻止用户使用view source、Firebug、Chrome开发工具等轻松复制原始JSON数据

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

我有两种将JSON包传送到浏览器的方法:

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

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


我的选择是什么?

由于数据将保存在您客户的计算机上,因此除了。。。不发送

因此,您可以在服务器端呈现一些视图并将它们发送到客户端,但在您的情况下,这可能不可行

另一种方法是发送数据,但使未经授权的用户难以访问数据

如果应用程序使用的是用户数据库,则可以为每个用户生成一个固定密钥,并在将敏感数据发送到客户端之前对其进行加密,然后客户端将使用在客户端计算的相同密钥对其进行解密

此外,您可以微调要发送或不发送给每个用户的数据

如果您想在客户端接收数据和数据进入地图之间保护数据,恐怕这是不可能的,因为您正在使用的地图组件可能正在等待标准JSON数据


无论如何,保护数据是没有意义的,因为它将显示在地图上。

Base-64对字符串进行编码
然后就可以用JavaScript对其进行base64解码
这应该使它足够不可读,当然没有真正的安全性
而且速度很快

您需要注意UTF-8字符(例如德语或法语)

e、 g.在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返回,然后对网页上的字符串进行位移位,将其传递给eval,eval将为您提供解密函数,然后解密加密的base64字符串,然后对该字符串进行base-64解码

但在chrome调试控制台上解密只需几秒钟,我曾经解密过这样的东西,我想在codecanyon上可以免费获得“Tabs”脚本;(不要为标签费心,它们太臃肿了,最好自己花点时间来做);)

我想你现在在这里发现了,但我不知道“加密”方法是否还在那里

此外,还可以在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,{}));
但是对于一个中等程度的程序员(像我一样),找出系统并解密所有这些组合的数据只需要appx。15-30分钟,(实验发现,从codecanyon尝试)

这是值得怀疑的,如果这样的事情是值得你的时间,因为像我这样的人花更少的时间来反向工程你的“加密”比你需要“编码”它

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

您还可以将JSON字符串划分为一个JSON字符串块数组,这使得解密变得更加困难(可能根据特定系统旋转数组中的序列也会有所帮助)

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

var x = ['a', 'b', 'c'];
然后你可以像这样把它带回来

console.log(x.join(""));
您还可以反转字符串,并将其放入一个数组中(amCharts就是这样做的)
然后你把它带回来

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

最后一个对于utf-8来说可能很棘手,因为您需要正确地反转字符串,如“Les misérables”(另请参见和)

传递给客户端的所有内容都不安全,您可以尝试混淆数据,但最后只需添加一行console.log()


另一种选择,我只是猜测,因为我不确定谷歌地图是如何工作的,但你可能首先只向地图发送地理位置,这样你将在地图上有PIN,只有在点击ping之后,你才能从api获取其他数据(名称、地址)。谷歌地图应该支持像onclick这样的东西。

用每个人在这个线程和其他线程上谈论的所有技巧来骚扰潜在的刮刀/黑客。但是正如已经说过很多次的那样,一旦数据被发送到客户端,它基本上就不受保护了

也许你的想法也应该包括以下几点:

-如何识别某人何时正在抓取(例如,监视IP、阈值、用户活动等),并对此采取措施,或者至少确定罪魁祸首

-把版权和其他标识放在你能做的任何事情上,以帮助其他用户看到并理解这是你的数据,而不是“抄袭者”。看看艺术家们已经做了很长一段时间了


-在数据中隐藏陷阱,以帮助识别数据的唯一性;只有你知道,刮刀不会费心去寻找或懒得去检查。如果scraper也公开使用您的数据,那么可能这可以用于法律案件,或者至少您可以公开羞辱罪犯。

这是出于隐私原因吗?无论您如何将数据发送给客户,99%的时间都可以对其进行解模糊/解码。你有没有办法把它呈现在服务器端并提供解析后的数据?@lechariotdor:对我来说,听起来更像是防止抄袭,以防可能的竞争对手。我不想让我的竞争对手复制我的数据库。信息是n
x.reverse().join("");