关于 jquery:用 php 显示谷歌地图标记

show google map markers with php

大家好!

我正在开发一个谷歌地图项目,用户可以在其中输入地址并获取在谷歌地图上绘制的附近餐馆的结果。
到目前为止没有问题。我创建了一个 ajax 调用,其中后端输出和 xml,然后使用 jquery 创建标记。

但现在我的问题。

有了这个 ajax 解决方案,任何人都可以使用 firebug 或其他 webdeveloper 工具轻松访问包含我拥有的餐厅的所有名称、纬度和经度的 xml 结果。
我想以某种方式保护显示的数据。

我该怎么做?

如何在没有 jquery 的情况下使用 php 绘制 google 地图标记?可以吗?

提前谢谢!


交互式地图的 Google 地图标记(使用 API 中的 GMap2 对象)必须在客户端(使用 Javascript)创建,因此容易对数据进行逆向工程。

如果您想在服务器上生成地图数据,那么您只能在客户端使用静态功能。您可以使用 Google Static Maps API 在服务器上构建一个 URL,其中包含有关您要显示的标记以及静态地图将显示的区域的信息。这种方法牺牲了客户端的一些可用性(没有动态缩放、平移、标记弹出窗口等)来保护您的数据。

注意坚定的工程师仍然可以通过以下方式访问您的数据(尽管有一些困难):

  • 解析您的静态地图 URL 以确定地图区域
  • 分析图像数据以查找标记并确定其位置。


保护数据的唯一方法是在将地图发送到浏览器之前渲染地图。这样做将取消大部分或所有谷歌地图的酷功能,因为您只需要显示一个图像。

任何可以通过 google 地图访问的数据都可以被有萤火虫的人访问。


您可以采取一些措施来让试图获取您数据的人难以为继:

在您的服务器代码中,检查标头以查看请求是否来自您的客户端页面。如果请求来自其他任何地方,则不返回任何内容。

对您从服务器返回的数据进行编码。在您的客户端代码中尽可能晚地对其进行解码,以便您在任何时候都只有 Javascript 变量中一家餐厅的明文。这样,使用 Firebug 的人一次只能直接读取一家餐厅。

让您的服务器一次只返回有限数量的位置,即使有人使用 Firebug 更改请求参数,以便它在大范围内请求餐馆。这样他们就只能一次获取多个位置的密文,然后粘贴到他们自己的代码中,他们已经在其中放置了您的解码函数的副本。

与其在一次调用中获取有限数量的位置的密文,不如发送多个请求,每个请求都返回非常少量的位置,并带有一个额外的参数,用于指定请求的餐厅块。

这不是万无一失的,但是对于获取大量数据的人来说,要么需要很长时间,要么需要相当复杂的攻击技术,例如欺骗请求标头。


简单的答案 - 你不能。

长答案

您可以在服务器端绘制图像叠加层,有点像 Google 地图中的 Wikipedia 叠加层,但我认为不值得这样做。

您还可以在 php 会话中存储一个密钥,并在初始页面加载时将其传递给 JavaScript,然后如果没有使用正确的密钥(每个浏览器会话是唯一的)通过 Ajax 请求数据,则不返回数据。这只会保护您免受不支持 cookie 的简单机器人的侵害。更多的混乱然后获得。

还请记住,如果有人使用您的服务器作为数据源编写竞争站点,那么他们仍然必须通过自己的服务器传输 Ajax 请求,因为您无法使用 JavaScript 进行跨域请求,因此您会看到您的网络日志中来自同一 IP(他们的网络服务器)的大量请求,您可以轻松禁止该 IP。 (除非他们一次下载所有内容,然后从他们自己的服务器上提供服务)。

而且真的有必要吗?餐厅的位置并不是绝密。