Как отобразить веб-страницу и сохранить ее местоположение в секрете? - PullRequest
1 голос
/ 16 декабря 2009

Справочная информация:

У меня есть приложение на основе 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>

Поскольку фактический URL-адрес приватного Календаря Google является общедоступным, а не на моем сервере, я не хочу, чтобы пользователь мог узнать URL-адрес или добавить в закладки URL-адрес. Я не знаю, будет ли это включать в себя iframes, javascript или что-то еще необходимое, но я должен быть в состоянии сделать это как-нибудь.

Вопрос:

Как я могу отображать Календарь Google, сохраняя его истинное местоположение в безопасности?

Ответы [ 10 ]

11 голосов
/ 16 декабря 2009

Возможно, лучший способ - позволить вашему серверу на самом деле получить страницу с другого сервера, а затем доставить ее в виде содержимого в браузер.

Таким образом, внешний URL-адрес никогда не отправляется в браузер, и поэтому он ничего о нем не знает. Вместо этого клиент видит только URL вашего сервера. Поступив таким образом, вы сможете установить любой уровень безопасности на своей странице.

Практически все веб-языки (.Net, PHP, Java и т. Д.) Имеют поддержку для этой серверной стороны.

UPDATE

В связи с изменениями в вопросе появился новый подход: используйте API Календаря Google. Он создан именно для той ситуации, в которой вы находитесь. Он позволит вам отображать календарь Google внутри вашего а также управлять списком контроля доступа с помощью кода.

2 голосов
/ 16 декабря 2009

Вы можете создать свою собственную прокси-страницу.

Когда эта страница вызывается, ваш код будет:

  • Назовите реальный URL (тот, который вы хотите скрыть).
  • Вычеркните из него HTML.
  • Удалите все ссылки на скрытый URL в этом HTML.
  • Отправьте этот HTML обратно клиенту.

Кроме того, согласно идее @ DanLoewenherz, эта страница будет работать только один раз.

Я не уверен, какой язык / стек вы используете, но в ASP.NET MVC это возможно.

2 голосов
/ 16 декабря 2009

Вы можете написать код, который будет динамически генерировать эти URL и позволять доступ к ним только один раз. Таким образом, пользователи могут добавлять в закладки все, что хотят, но безрезультатно.

2 голосов
/ 16 декабря 2009

Почему вы хотите это сделать? Вы действительно не можете полностью скрыть URL другой страницы, если только вы не извлекаете страницу и не скрываете ее, отображая ее на странице формы POSTED на своем сайте.

Вы можете попробовать наложить его в рамку, но URL все еще можно найти.

Если вы хотите что-то простое, чтобы люди не могли причинно не делать закладки на URL, установите ссылку POSTED или форму, которая направляет зрителю в рамке (встраивание страницы в другую). Если кто-либо добавит в закладки или предоставит доступ к странице без данных POSTED, он может отобразить страницу, которая не найдена, или доступ запрещен.

1 голос
/ 16 декабря 2009

Лучший вариант - IMO , создающий Календарь Google самостоятельно (используя Zend_GData) и самостоятельно управляющий "защитой". Это самый безопасный способ из всех;)

1 голос
/ 16 декабря 2009

Нет абсолютно безопасного способа сделать это без создания собственного прокси-сервера с проверкой подлинности, который извлекает все HTML, JS, CSS и т. Д., Изменяет все URL-адреса и возвращает их пользователю. Это не простая задача.

0 голосов
/ 16 декабря 2009

Есть страница, которая делает:

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

И создайте секретный URL для этой страницы.

0 голосов
/ 16 декабря 2009

Чтобы увидеть эту страницу нужна какая-то аутентификация?если нет, думаю, это решит проблему.

<?php
$page=curl_init("http://google.com/calendar/...");
curl_setopt($page,CURLOPT_RETURNTRANSFER,1);
echo utf8_decode(curl_exec($page));
?>
0 голосов
/ 16 декабря 2009

Используя Zend, вы можете использовать класс Zend_Http_Client, чтобы получить страницу с внешнего сервера и вернуть ее пользователю.

0 голосов
/ 16 декабря 2009

используя веб-сервер Apache, вы можете использовать mod-rewrite

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...