2010-10-06 2 views
9

У меня есть сценарий, который использует JSONP для совершения перекрестных доменов ajax-вызовов. Это отлично работает, но мой вопрос в том, есть ли способ предотвратить доступ других сайтов и получение данных из этих URL-адресов? В основном я хотел бы составить список разрешенных сайтов и возвращать данные только в том случае, если они находятся в списке. Я использую PHP и цифру, я мог бы использовать «HTTP_REFERER», но прочитал, что некоторые браузеры не отправят эту информацию .... ??? Есть идеи?Защита JSONP?

Спасибо!

+6

Также 'REFERRER' может быть подделан –

ответ

6

Действительно не существует эффективного решения. Если ваш JSON доступен через браузер, он также доступен для других сайтов. На веб-сервер запрос, исходящий из браузера или другого сервера, практически неотличим от заголовков. Как прокомментировал ILMV, рефереры (и другие заголовки) могут быть сфальсифицированы. В конце концов, они сообщают о себе.

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

С этой мыслью вы можете создать барьер входа достаточно высоко, чтобы другие сайты, вероятно, не беспокоились о том, чтобы делать запросы с барьерами входа на место. Вы можете создавать токены с одним использованием, которые необходимы для захвата данных json. Как только токен используется для захвата данных json, токен затем становится недействительным. Чтобы получить токен, веб-страница должна быть запрошена с помощью токена, встроенного в страницу в javascript, который затем помещается в вызов ajax для данных json. Объедините это с истекающими во времени маркерами и достаточной обфускацией в javascript, и вы создали достаточно высокий барьер.

Просто помните, что это невозможно обойти. Другой сайт может извлечь токен из javascript и перехватить вызов ajax и захватить данные в нескольких точках.

+0

+1 для токенов одноразового использования – mattbasta

0

У вас есть доступ к серверам/сайтам, которые вы хотели бы предоставить JSONP?

Что вы могли бы сделать, хотя и не идеально, это добавить запись на db IP-адреса на загрузку страницы, которая разрешена для просмотра JSONP, а затем на нагрузке jsonp, проверьте, существует ли эта запись. Возможно, в случае необходимости истечет срок записи.

например.

http://mysite.com/some_page/ - страница пользователя загружает, добавьте их IP в базе данных разрешенных пользователей

http://anothersite.com/anotherpage - как указано выше, добавьте в базу данных

  • нагрузки JSONP, проверьте IP существует в базе данных.
  • Через час удалить запись из БД, поэтому другой загрузки страницы потребуется, например

Хотя это может довольно легко можно обойти, если скребок (или другие сайты) удалось выяснить, что метод вы используете, чтобы пользователи могли просматривать JSONP, им нужно было сначала нажать на страницу.

-1

Я уверен, что вы можете сделать это с Htaccess -

Убедитесь, что ваши заголовки посылают «HTTP_REFERER» - я не знаю, любой браузер, который обыкновение посылать его, если сказать ему.(если вы все еще беспокоитесь, откиньтесь изящно)

Затем используйте htaccess, чтобы разрешить/запретить доступ от нужного референта.

# deny all except those indicated here 
order deny,allow 
deny from all 
allow from .*domain\.com.* 
0

Как насчет использования файла cookie, который содержит токен, используемый с каждым запросом jsonp? В зависимости от настройки вы также можете использовать переменную, если вы не хотите использовать файлы cookie.

0

Работа с импортом в формате Web Worker совсем не отличается от jsonp. Сделайте двойную проверку, как сказал AlexPoon. Основной скрипт для веб-рабочего, веб-рабочего для разрыва и возврата с помощью запроса безопасности. Если веб-исполнитель отвечает на главный скрипт, не спрашивая его или не используя его, он лучше перенаправляет ваш сайт на нирвану. Если сервер задан с неправильным токеном, не отвечайте. Куки-файлы не будут отправляться с запросом importScript, потому что документ недоступен на уровне веб-работника. Всегда отправляйте безопасные файлы cookie с запросом на отправку.

Но все еще существует множество рисков. Человек в середине знает, как.