2014-11-07 4 views
0

Я создаю приложение с Node.js и Mongo DB, создавая представления с помощью Swig. У меня есть база данных с именами компаний, адресами и данными геоданных, которые отображаются на карте Google с помощью контактов.Защита необработанных данных JSON от копирования

Я хотел бы, чтобы запретить пользователям легко копировать исходные данные в формате JSON с использованием источника зрения, Firebug, Chrome Dev инструменты и т.д.

Я не после того, как банк безопасности класса, просто хочу, чтобы сделать его достаточно трудно большинство пользователей отказаться.

У меня есть два пути доставки пакета JSON в браузере:

1) Использование Swig, передавая пакет JSON непосредственно в представлении. Проблема в том, что простой источник просмотра покажет JSON.

2) Запрос данных с помощью вызова AJAX. В этом случае данные легко доступны с помощью инструментов Chrome Dev.

Какие у меня варианты?

+0

Это по соображениям конфиденциальности? – tiledcode

+1

Независимо от того, как вы отправляете его клиенту, в 99% случаев он может быть дефискурирован/декодирован. Есть ли какой-либо способ сделать его серверным и обслуживать анализируемые данные? –

+0

@lechariotdor: Мне звучит больше похоже на предотвращение подражания, против возможных конкурентов. –

ответ

0

Base-64 кодирует строку.
Тогда вы можете просто base64-декодировать его в JavaScript.
Это должно сделать его достаточно нечитаемым, без реальной безопасности, конечно.
Плюс это быстро.

Вы должны заботиться с 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 декодирует эту строку.

Но это займет всего несколько секунд на консоли отладки хрома для дешифрования, я однажды расшифровал такую ​​вещь, я думаю, что на кодекане можно бесплатно получить скрипт «Табы»; (не беспокойтесь о вкладках, они являются вирусами, лучше инвестируйте время, чтобы сделать это сами);)

Я думаю, вы обнаружите, что в настоящее время здесь 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 \ x64 \ x72 \ x43 \ x6F \ x64 \ x65", вы можете вызвать ложные тревоги на определенном вирусе сканеры (McAffee, TrendMicro, Norton и т. д., обычные подозреваемые).

Вы также можете разбить строку JSON на массив строк JSON-строк, что затрудняет ее расшифровку (возможно, также может помочь чередование последовательности в массиве в соответствии с определенной системой).

Вы также можете разбить строку в массив полукокса:

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

Вы можете вернуть его обратно, как

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

Вы можете также обратить строку, и положить, что в массив (amCharts делает это).
Затем вернуть его обратно с

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

Последняя может быть сложным для UTF-8, как вам нужно правильно реверс строки, как «Les Miserables» (смотри также this и this)

0

Поскольку данные будут поступать на компьютер вашего клиента, нет другого способа полностью защитить эти данные, чем ... не отправлять его.

Таким образом, вы можете отобразить некоторые виды на стороне сервера и отправить их клиенту, но это может быть невыполнимо в вашем случае.

Другим способом было бы отправлять данные, но чтобы затруднить доступ к нему неавторизованного пользователя.

Если ваше приложение использует базу данных пользователя, вы можете создать фиксированный ключ для каждого пользователя и зашифровать разумные данные перед отправкой его клиенту, а затем клиент расшифрует его с помощью того же ключа, вычисленного на стороне клиента.

Кроме того, вы можете точно настроить, какие данные вы хотите отправлять или не отправлять каждому пользователю.

Если вы хотите защитить данные между моментом получения клиентом и моментом, указанным на карте, я боюсь, что это невозможно, поскольку компонент карты, который вы используете, вероятно, ждет стандартных данных JSON ,

В любом случае, нет смысла защищать ваши данные, поскольку они будут отображаться на вашей карте.

0

Everything который передается клиенту, небезопасен, вы можете попробовать обфускацию данных, но в итоге место, где вы разместите карту, будет доступно, просто добавив строку консоли.log()

Другой вариант, я просто размышляю, поскольку я не совсем уверен, как работают карты Google, но вы можете сначала отправить только географию на карту, таким образом, у вас будут контакты на карте, только после нажатия на пинг вы можете получить другие данные из api (имя, адрес). Карты Google должны поддерживать что-то вроде onclick.

0

Annoy потенциальный скребок/хакер со всеми трюками, о которых все говорят об этой теме и других. Но, как было сказано много раз, как только данные отправляются клиенту, он в основном незащищен.

Возможно, ваше мышление должно включать в себя такие вещи тоже:

-Как определить, когда кто-то выскабливание (например, мониторинг IP-адресов, пороги, активности пользователей и т.д.) и сделать что-нибудь об этом или, по крайней мере, определить виновника.

-Потом авторские права и другая идентификация на любую вещь, которую вы можете, чтобы помочь другим пользователям понять и понять, что это ваши данные, а не скребки ». Посмотрите, что художники уже делали, надолго.

-Закрыть скрытые ловушки в ваших данных, чтобы идентифицировать их как уникальные; что только вы знаете, и скребок не стал бы искать или слишком ленив, чтобы проверять. Если скребок использует ваши данные публично, возможно, это может быть использовано в судебном деле или, по крайней мере, вы можете публично позорить правонарушителя.

Смежные вопросы