Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Исполнение скрипта только изнутри сервера
 
 автор: sponge   (05.01.2008 в 02:10)   письмо автору
 
 

Как сделать, чтобы php скрипт исполнялся только если он будет вызываться из другого php-скрипта на сервере или из js-скрипта (например, аякс и request.open("GET", url, true);)

   
 
 автор: Unkind   (05.01.2008 в 02:24)   письмо автору
 
   для: sponge   (05.01.2008 в 02:10)
 

JavaScript сам ничего не делает. Его исполняет web-браузер, запрашивая нужное по HTTP-протоколу, через который Вы хотите, насколько я понял, запретить возможность запуска скрипта.

   
 
 автор: Trianon   (05.01.2008 в 02:30)   письмо автору
 
   для: sponge   (05.01.2008 в 02:10)
 

Дополню. Из другого php-скрипта (минуя протокол http) исходный тоже на практике не вызывается.

   
 
 автор: sponge   (05.01.2008 в 02:41)   письмо автору
 
   для: Trianon   (05.01.2008 в 02:30)
 

прошу прощения, не корректно выразился.
есть некоторый пхп-сценарий, вызывается он с параметрами, например
get.php?year=2007
можно ли сделать так, чтобы результат выводился только в том случае, если он запущен из браузера пользователя, а не сграблен из скрипта на другом сервере, типа file('site.ru/get.php?year=2007')

   
 
 автор: SHAman   (05.01.2008 в 02:50)   письмо автору
 
   для: sponge   (05.01.2008 в 02:41)
 

Стопроцентной защиты нет. Но каждый раз, когда вам приходит запрос к вашему скрипту, клиент посылает определенные заголовки. Неплохо было бы эти заголовки как-то просматривать. Например, я бы смотрел имя клиента и какие-нибудь другие параметры. Например, referer и ip. Если вас грабит неопытный программист, то заголовки он подделывать не будет. Тогда, скорее всего, по имени клиента, вы его словите.

Кроме того, при граббинге, обычно одной страницей не ограничиваются. Берут больше. Причем, обращения идут одно за другим, когда бот ходит по ссылкам. Можно вести лог обращений. Скажем, записывать в файл или базу последние N айпишников, с которых обращались к вашему сайту. И точное время обращения. Если обращений больше 3 за 2 секунды, то это, почти наверняка, бот. И этот ip можно занести в особый файл, для рассмотрения его, как кандидатуры на бан.

Из достоверного источника знаю, что бан по ip - эффективная вещь, при всех своих недостатках. А недостатоки просты:
1) если пользователи сидят через прокси, то у них один и тот же ip. При этом, и количество обращений с одного ip может возрастать (сработает фильтр частотный), и в случае бана, из-за одного пострадают все пользователи данного прокси.

2) у некоторых пользователей динамический ip. Если они заграбили ваш сайт один раз, вы занесли ip в бан-лист, то это не помешает переподключиться снова, получить другой ip и снова ковырять ваш сайт.

Ну и напоследок: любые заголовки можно подделать. Даже ip. Поэтому 100%-ной защиты нет и не будет.

   
 
 автор: Unkind   (05.01.2008 в 03:04)   письмо автору
 
   для: SHAman   (05.01.2008 в 02:50)
 

> любые заголовки можно подделать. Даже ip
IP не заголовок. И при его подделке нельзя будет получить никакой пользы. Если не считать засорение канала пользой, конечно.

   
 
 автор: SHAman   (05.01.2008 в 16:14)   письмо автору
 
   для: Unkind   (05.01.2008 в 03:04)
 

Вы уверены, что ip - не присылается в ввиде заголовка? А как? Я не уверен, вы меня с толку сбили, поэтому я спрашиваю:)

   
 
 автор: bronenos   (05.01.2008 в 16:37)   письмо автору
 
   для: SHAman   (05.01.2008 в 16:14)
 

Он серваком определяется и кидается в переменные окружения

   
 
 автор: SHAman   (05.01.2008 в 17:05)   письмо автору
 
   для: bronenos   (05.01.2008 в 16:37)
 

Ой, туплю. Да, точно. ip определяется на этапе установки соединения, а не на этапе посылки данных клиентом. Моя ошибка.

   
 
 автор: Unkind   (05.01.2008 в 17:09)   письмо автору
 
   для: SHAman   (05.01.2008 в 16:14)
 

> Вы уверены, что ip - не присылается в ввиде заголовка? А как?
Уверен, конечно. IP светится на уровне пакетов - в каждом пакете указывается с какого IP на какой передается.

   
 
 автор: SHAman   (05.01.2008 в 18:04)   письмо автору
 
   для: Unkind   (05.01.2008 в 17:09)
 

Да, я протупил. Прошу прощения.

   
 
 автор: bronenos   (05.01.2008 в 10:32)   письмо автору
 
   для: SHAman   (05.01.2008 в 02:50)
 

Дополню
То, что мы пишем на PHP - программы (под названием скрипты)
То, что пишут на C++ - программы

Возможности у них схожи (в рассматриваемом плане), можно написать браузер на PHP, который будет заголовки отправлять как и настоящий, и поэтому браузер от file_get_contents или fsockopen отличается только тем, что подставляет нужные заголовки.

Тут о защите и речи нет (100%-ной)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования