背景:
我有一个基于PHP(Zend框架)应用程序。 它是安全的,只有谁被邀请的用户都能够访问其资源。 一,我要保持安全的资源是私人谷歌日历的链接。 这是一个公开的联系,但我想在谁可以查看它的控制。 有可能是一个时间,当一个用户帐户将被撤销,我不希望用户仍然可以访问该日历。
所以我想不给用户以了解它的真实位置的能力,没有能力书签它(如果用户已被删除),以显示此谷歌日历页:
我想我可以产生某种独特的网址,并在视图中显示这一点。
<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>
由于私人谷歌日历的实际地址是公开的,不是我的服务器上,我不希望用户能够知道的网址,也可以为书签的网址。 我不知道这是否会涉及到内部框架,JavaScript或什么是必要的,但我需要能够做一些这方面的知识。
题:
我怎样才能显示谷歌日历,同时保持它的真实位置安全吗?
也许最好的办法就是让你的服务器实际上是从其他服务器上获取的页面,然后将其作为内容到浏览器。
这样一来,外部URL永远不会发送到浏览器,因此它不知道有这回事。 相反,所有的客户端看到的是一个URL到您的服务器。 这样做,这样可以让你设置你希望你的页面上的任何安全性。
几乎每一个网络语言(.NET,PHP,JAVA等)都具有这样做的服务器端支持。
UPDATE
由于更改的问题,这里是一个新的方法:使用谷歌日历API。 它的建成,对于究竟你在的情况。它可以让你显示你的网站内的谷歌日历以及通过代码管理访问控制列表。
你为什么要这么做? 你真的不能完全掩盖另一个页面的URL,除非你抓取网页,并通过您的网站上张贴的窗体页上显示它隐藏起来。
你可以尝试在一个框架覆盖,但该网址仍然可以找到。
如果你想要的东西简单,以阻止人们没有因果关系的加书签的网址,设置引导到成帧观众贴出的链接或表单,(内嵌入另一个网页)。 如果未经发布的数据书签或共享网页,它可以显示未找到或页面访问不允许的。
您可以编写代码,将动态生成这些URL,并允许他们只进行一次访问。 通过这种方式,用户可以书签他们所有他们想也没有用。
你可以创建自己的代理页面。
当这个页面被调用时,你的代码:
- 调用真正的URL(你要隐藏的一个)。
- 刮HTML出来。
- 删除任何引用在HTML隐藏URL。
- 吐的是HTML返回给客户端。
此外,按照@ DanLoewenherz的想法,该网页只能使用一次。
我不知道你使用的是什么语言/堆栈,但上面有可能在ASP.NET MVC。
有没有做到这一点,而不产生获取所有的HTML自己的身份验证的代理服务器完全安全的方式,JS,CSS等,修改所有的URL,并将其返回给用户。 这不是一个简单的任务。
最好的办法是IMO 生成谷歌日历自己 (使用Zend_GData)和韩德尔的“保护”自己。 这是所有的最安全的方式;)
看到这个页面,需要某种形式的验证? 如果没有,我想这解决了这个问题。
<?php
$page=curl_init("http://google.com/calendar/...");
curl_setopt($page,CURLOPT_RETURNTRANSFER,1);
echo utf8_decode(curl_exec($page));
?>
有一个网页,做:
file_get_contents('http://www.example.com/gcal');
并生成该页面秘密URL。
使用Zend,你可以使用类Zend_Http_Client
从外部服务器获取的页面,并将其返回给用户。
使用Apache Web服务器,你可以使用国防部重写
http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html