我有一个基于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日历?
答案 0 :(得分:11)
也许最好的方法是让服务器实际从其他服务器获取页面,然后将其作为内容提供给浏览器。
这样,外部URL永远不会发送到浏览器,因此它对此一无所知。相反,所有客户端都看到了服务器的URL。这样做可以让你在页面上设置你想要的任何安全性。
几乎所有的网络语言(.Net,PHP,java等)都支持这个服务器端。
<强>更新强>
由于问题发生了变化,以下是一种新方法:使用Google Calendar API.它专为您所处的情况而构建。它将允许您在网站中显示Google日历以及管理通过代码访问控制列表。
答案 1 :(得分:2)
你为什么要这样做?您实际上无法完全隐藏其他页面的网址,除非您通过在网站上的POSTED表单页面上显示页面并将其隐藏来隐藏它。
您可以尝试将其覆盖在一个框架中,但仍然可以找到该网址。
如果你想要简单的东西,为了防止人们因为没有为网址添加书签,请设置一个指向框架查看器的POSTED链接或表单(将页面嵌入到另一个页面中)。如果有人书签或共享没有POSTED数据的页面,它可以显示未找到的页面或不允许访问。
答案 2 :(得分:2)
您可以编写动态生成这些URL的代码,并允许它们只被访问一次。这样,用户可以将他们想要的所有内容添加为书签,但无济于事。
答案 3 :(得分:2)
您可以创建自己的代理页面。
调用此页面时,您的代码将:
另外,根据@ 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