如何显示网页并保密其位置?

时间:2009-12-15 22:07:17

标签: php html zend-framework

背景:

我有一个基于PHP(Zend Framework)的应用程序。它是安全的,只有被邀请的用户才能访问其资源。我想要保证安全的资源之一是指向私人Google日历的链接。这是一个公共链接,但我想控制谁可以查看它。可能有一段时间用户帐户将被撤销,我不希望该用户仍能访问该日历。

因此,我希望显示此Google日历页面,而不会让用户知道其真实位置,也无法为其添加书签(如果用户已被删除):

我想我可以生成某种独特的URL并在视图中显示它。

<a href="/secret/link/4b21efc1ae7bb">Click here to see this secret page that only users who have been given permission are allowed to see</a>

由于私有Google日历的实际网址是公开的,而不在我的服务器上,因此我不希望用户能够知道该网址,也无法为该网址添加书签。我不知道这是否会涉及iframe,javascript或其他任何必要的内容,但我需要能够做到这一点。

问题:

如何在保持真实位置安全的同时显示Google日历?

10 个答案:

答案 0 :(得分:11)

也许最好的方法是让服务器实际从其他服务器获取页面,然后将其作为内容提供给浏览器。

这样,外部URL永远不会发送到浏览器,因此它对此一无所知。相反,所有客户端都看到了服务器的URL。这样做可以让你在页面上设置你想要的任何安全性。

几乎所有的网络语言(.Net,PHP,java等)都支持这个服务器端。

<强>更新

由于问题发生了变化,以下是一种新方法:使用Google Calendar API.它专为您所处的情况而构建。它将允许您在网站中显示Google日历以及管理通过代码访问控制列表。

答案 1 :(得分:2)

你为什么要这样做?您实际上无法完全隐藏其他页面的网址,除非您通过在网站上的POSTED表单页面上显示页面并将其隐藏来隐藏它。

您可以尝试将其覆盖在一个框架中,但仍然可以找到该网址。

如果你想要简单的东西,为了防止人们因为没有为网址添加书签,请设置一个指向框架查看器的POSTED链接或表单(将页面嵌入到另一个页面中)。如果有人书签或共享没有POSTED数据的页面,它可以显示未找到的页面或不允许访问。

答案 2 :(得分:2)

您可以编写动态生成这些URL的代码,并允许它们只被访问一次。这样,用户可以将他们想要的所有内容添加为书签,但无济于事。

答案 3 :(得分:2)

您可以创建自己的代理页面。

调用此页面时,您的代码将:

  • 调用真实网址(您要隐藏的网址)。
  • 将HTML从中删除。
  • 删除对该HTML中隐藏网址的任何引用。
  • 将HTML吐回客户端。

另外,根据@ DanLoewenherz的想法,该页面只能使用一次。

我不确定您使用的是哪种语言/堆栈,但上述内容可以在ASP.NET MVC中使用。

答案 4 :(得分:1)

如果没有创建自己经过身份验证的代理服务器来获取所有HTML,JS,CSS等,修改所有URL并将其返回给用户,则没有完全安全的方法。这不是一项简单的任务。

答案 5 :(得分:1)

最佳选择是IMO 自己生成Google日历(使用Zend_GData)并自行“保护”。这是最安全的方式;)

答案 6 :(得分:0)

使用Zend,您可以使用类Zend_Http_Client从外部服务器获取页面,并将其返回给用户。

答案 7 :(得分:0)

要查看此页面,需要进行某种身份验证吗?如果没有,我想这可以解决问题。

<?php
$page=curl_init("http://google.com/calendar/...");
curl_setopt($page,CURLOPT_RETURNTRANSFER,1);
echo utf8_decode(curl_exec($page));
?>

答案 8 :(得分:0)

有一个页面:

file_get_contents('http://www.example.com/gcal');

并为该页面生成一个秘密URL。

答案 9 :(得分:-3)

使用Apache Web Server,您可以使用mod-rewrite

http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html