保护原始JSON数据不被复制

时间:2014-11-07 12:58:26

标签: javascript json node.js security swig-template

我正在使用Node.js和Mongo DB创建一个应用程序,使用Swig渲染视图。 我有一个商业名称,地址和地理位置数据的数据库,这些数据正在使用图钉绘制到Google地图上。

我想阻止用户使用视图源,Firebug,Chrome Dev工具等轻松复制原始JSON数据。

我不是在银行级别的安全性之后,只是想让大多数用户都放弃它。

我有两条将JSON包提供给浏览器的路径:

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

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

我有什么选择?

4 个答案:

答案 0 :(得分:0)

由于数据将在客户端的计算机上运行,​​因此没有其他方法可以完全保护这些数据,而不是......不发送数据。

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

其他方式,是发送数据,但是让未经授权的用户很难访问它。

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

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

如果你想保护客户端接收数据的时间和地图上的数据,我担心这是不可能的,因为你正在使用的地图组件可能正在等待标准的JSON数据。

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

答案 1 :(得分:0)

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,这将为您提供解密函数,然后解密加密的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字符串块的数组,使其更难解密(可能根据某个系统旋转数组中的序列也可能有所帮助)。

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

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

然后你可以像

一样把它带回来
console.log(x.join(""));

你也可以反转字符串,并把它放到一个数组中(amCharts就是这样)。
然后你带回来

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

对于utf-8,最后一个可能会很棘手,因为你需要正确地反转像“悲惨世界”这样的字符串(另请参阅thisthis

答案 2 :(得分:0)

传递给客户端的所有内容都不安全,您可以尝试模糊数据,但最后只需添加一行console.log()即可访问您放入地图的位置

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

答案 3 :(得分:0)

惹恼一个潜在的刮刀/黑客,其中包含每个人在这个帖子和其他人谈论的所有技巧。但是,由于它被多次说过,一旦数据被发送到客户端,它基本上没有受到保护。

也许你的想法也应该涉及这些事情:

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

- 对您可以使用的任何内容进行版权和其他识别,以帮助其他用户查看和了解您的数据,而不是刮刀&#39;。看看艺术家已经做了很长时间了。

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