用php显示谷歌地图标记

时间:2009-12-21 10:41:53

标签: php jquery google-maps

大家好!

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

但现在我的问题。

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

我该怎么做?

如何在不使用jquery的情况下使用php绘制谷歌地图标记?可以吗?

提前

thx!

4 个答案:

答案 0 :(得分:4)

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

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

N.B。确定的工程师仍然可以通过以下方式访问您的数据(尽管有一些困难):

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

答案 1 :(得分:3)

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

谷歌地图可以访问的任何数据都可以由有萤火虫的人访问。

答案 2 :(得分:1)

有些事情可以让那些试图获取数据的人生活困难:

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

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

让您的服务器一次只返回有限数量的位置,即使有人使用Firebug更改请求参数,以便它要求大半径范围内的餐馆。这样他们就可以一次抓住那么多位置的密文,粘贴到他们自己的代码中,在这些代码中他们放置了你的解码函数的副本。

在单个呼叫中,即使是有限数量的位置也不会抓取密文,而是发送多个请求,每个请求返回非常少量的位置,并使用额外的参数指定请求哪些餐馆。

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

答案 3 :(得分:0)

简单回答 - 你不能。


答案很长

您可以在服务器端绘制图像叠加层,有点像Wikipedia overlay in Google maps,但我认为这不值得付出努力。

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

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

这是否真的有必要?这不像餐厅位置是绝密的。