1

我正在使用 Node.js 和 Mongo DB 创建一个应用程序,使用 Swig 呈现视图。我有一个包含企业名称、地址和地理位置数据的数据库,这些数据被绘制到带有大头针的谷歌地图上。

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

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

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

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

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

我有哪些选择?

4

4 回答 4

1

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 返回,然后对网页上的字符串进行反位移,将其传递给 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 可能很棘手,因为您需要正确反转字符串,例如“Les misérables”(另请参见thisthis

于 2014-11-07T13:15:32.060 回答
0

由于数据将在您客户的计算机上传输,因此没有其他方法可以完全保护该数据,而不是......不发送它。

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

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

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

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

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

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

于 2014-11-07T13:13:52.787 回答
0

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

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

于 2014-11-07T13:21:05.523 回答
0

用每个人在这个线程和其他线程上谈论的所有技巧来惹恼潜在的爬虫/黑客。但正如多次说过的,一旦数据发送到客户端,它基本上是不受保护的。

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

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

- 将版权和其他标识放在您可以的任何东西上,以帮助其他用户看到并理解这是您的数据,而不是抓取工具。看看艺术家们长期以来一直在做什么。

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

于 2018-01-24T13:45:49.110 回答