Как создать макет карты со скрытыми данными? - PullRequest
1 голос
/ 03 февраля 2020

Я создал API для личного проекта, который возвращает некоторые данные Geo JSON.

В настоящее время эти данные в основном возвращаются клиенту для отображения на карта. Тем не менее, клиент имеет (очевидно) полный доступ к возвращенным данным, и он должен реализовать сам необходимый Javascript для его отображения.

Что-то вроде:

$.ajax({
    url: "url/to/my/api",
    type: "POST",
    data: JSON.stringify({ /* some parameters */ }),
    contentType: 'application/json',
}).done(function(data) {
    data.addTo(map); 
    //data contains all the geo-coordinates, visible in browser console, that I'd like to hide
});

Вопрос : есть ли способ «запутать» данные, чтобы клиент мог отобразить их на карте, но отказать ему? право смотреть на данные?

Например, Google Maps API реализует некоторый traffi c layer , и мы не можем смотреть на данные, которые составляют линии метро, ​​просто отобразить его:

var transitLayer = new google.maps.TransitLayer();
transitLayer.setMap(map);

Как реализовать нечто подобное, чтобы «спрятать» возвращенные данные клиенту и просто дать ему возможность отобразить их на карте?

Спасибо

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Gmaps не «возвращает» какие-либо транзитные данные клиенту - он восстанавливает плитки изображения , как только вы установите transitLayer для экземпляра карты:

enter image description here

против

enter image description here


Существует множество (гео) JSON усилителей / obfuscators, самым простым из которых может быть кодирование base64 (технически просто тривиальный визуальный обфускатор) в бэкэнде, а затем декодирование во внешнем интерфейсе с использованием atob.

Пример: {"type":"FeatureCollection","features":[]} кодируется b64 eyJ0eXBlIjoiRmVhdHVyZUNvbGxlY3Rpb24iLCJmZWF0dXJlcyI6W119. Но обратите внимание, что все, кто был рядом, увидят это ...

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

Впоследствии это становится вопросом криптографии c, а не гео json вопросом!

1 голос
/ 05 апреля 2020

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

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

...