1

我为个人项目创建了一个 API,它返回一些GeoJSON数据。

目前,这些数据基本上是返回给客户端以显示在地图上。但是,客户端(显然)可以完全访问返回的数据,并且它必须自己实现必要的 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 实现了一些交通层,我们不能查看构成地铁线路的数据,只显示它:

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

如何实现类似的东西,将返回的数据“隐藏”给客户端,让他有可能在地图上显示它?

谢谢

4

2 回答 2

3

Gmaps 不会将任何交通数据“返回”给客户端——它会在您将 设置为地图实例后立即重新生成图像图块:transitLayer

在此处输入图像描述

对比

在此处输入图像描述


有很多(地理)JSON uglifiers/obfuscators,其中最简单的可能是后端的 base64 编码(技术上只是一个微不足道的视觉混淆器),然后在前端使用atob.

示例: {"type":"FeatureCollection","features":[]}b64 编码为eyJ0eXBlIjoiRmVhdHVyZUNvbGxlY3Rpb24iLCJmZWF0dXJlcyI6W119. 但请注意,周围的每个人都会看穿这个......

在您考虑混淆之前,请确保您的 API 端点是安全的并具有正确的 CORS 标头。其次,您可能想要跟踪谁访问了您的 API 以及何时访问。

之后,这变成了一个密码问题,而不是 geojson 问题!

于 2020-04-04T11:39:50.870 回答
1

您无法实现浏览器和 JS 使用的任何内容的绝对安全性。不管你对数据的编码有多困难,它必须在 JS 地图渲染引擎能够使用它之前被解码,这就是任何对它感兴趣的人都会截获它的地方。

可能唯一可靠的方法是让您的 API 服务于您的客户将放在他们的地图上的预制图像叠加层。在 GMaps 的情况下,他们可以为此使用自定义叠加层

于 2020-04-05T07:59:34.707 回答