Стандартный Антиспам-сервис IPB: "зависает" php-команда fgets() - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

sockets

  • 2 Страниц +
  • 1
  • 2

Стандартный Антиспам-сервис IPB: "зависает" php-команда fgets()

#1 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 06 Март 2015 - 22:41

Что имеем:
1) Срок активности лицензии истёк и как следствие, антиспам-фильтр от IP.Board не работает (не должен работать)
2) В настройках IP.Board включаем антиспам-фильтр (почему-то IP.Board разрешает это сделать при истёкшей лицензии)

Что получаем:
При попытке регистрации нового пользователя на странице регистрации (шаг 1) нажимаем кнопку "Регистрация" и... ждём 3 мин, после чего получаем от сервера ошибку "Internal Server Error"
Первое, что пришло в голову - бесконечный цикл где-то в глубинах исходных кодов IP.Board

Локализация причины
1) /admin/sources/base/ipsController.php => ipsController::init():
protected function init()
{
    $this->registry = ipsRegistry::instance();
    $this->registry->init();
}

2) /admin/sources/base/ipsController.php => ipsController::handleRequest():
self::$cmd->execute( $this->registry )

3) /admin/applications/core/modules_public/global/register.php => public_core_global_register::_completeRegistrationSave():
//-----------------------------------------
// Pass twitter/facebook via spam service
//-----------------------------------------
...
/* Query the service */
$spamCode = IPSMember::querySpamService( $member['email'] );

4) /admin/sources/base/ipsMember.php => IPSMember::querySpamService():
/* Query the service */
$response = $query->postFileContents( "https://remoteservices.invisionpower.com/spam/{$type}", array( 'email' => $email, 'ip' => $ip ), $key, $key );

5) /kernel/classFileManagement.php => classFileManagement::postFileContents():
//-------------------------------
// Is URL, try curl and then fall back
//-------------------------------
...			
$contents = $this->_getContentsWithSocket( $file_location );

6) /kernel/classFileManagement.php => classFileManagement::_getContentsWithSocket():
while( ! feof($fp) && ! $status['timed_out'] )		
{
    $data .= fgets( $fp, 8192 );
    $status = stream_get_meta_data($fp);
}

Вот здесь команда fgets "зависает". При этом поток $fp проинициализирован:
print_r($fp) = "Resource id #35"

По каким-то причинам IP.Board'овский сервер не отдаёт ни EOF, ни EOL ?
0

#2 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 06 Март 2015 - 22:47

Удаленный сервер не отвечает или недоступен.

По умолчанию установлен таймаут в 15 сек. Если превышен этот лимит при чтение функцией fgets, $status['timed_out'] принимает значение TRUE и цикл завершается.

php.net сказал(а):

Когда время работы потока истекает, ключ 'timed_out' массива, возвращаемого функцией stream_get_meta_data(), устанавливается в значение TRUE, хотя ошибка или предупреждение не генерируется.

0

#3 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 06 Март 2015 - 23:43

Просмотреть сообщениеsiv1987 06 Март 2015 - 22:47 сказал(а):

Удаленный сервер не отвечает или недоступен.

По умолчанию установлен таймаут в 15 сек. Если превышен этот лимит при чтение функцией fgets, $status['timed_out'] принимает значение TRUE и цикл завершается.

У меня для php-скриптов установлен лимит 3 минуты. Следовательно, через 15 сек цикл должен был завершиться. Но он не завершается. Команда fgets() работает все 3 мин. О чём это говорит ?

При загрузке страницы

Цитата


без каких-либо post/get-данных получаем от сервера 400 Bad Request. Что из этого следует ?

Сообщение изменено: cyrax_02 (06 Март 2015 - 23:44)

0

#4 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 07 Март 2015 - 00:29

Просмотреть сообщениеcyrax_02 сказал(а):

без каких-либо post/get-данных получаем от сервера 400 Bad Request. Что из этого следует ?

Из этого следует, что без ключа сервер не принимает запросы, для php нужно устанавливать curl и нехрен отправлять запросы на IPS с истекшей лицензией. У вас вообще-то копирайт IBR, насколько я знаю они юзают другой антиспам сервис.

Просмотреть сообщениеcyrax_02 сказал(а):

Команда fgets() работает все 3 мин.

Настройки -> Пользователи -> Защита от Спама -> Лимит времени соединения с сервисом

Какое значение стоит?

По крайней мере у меня, по истечению таймаута, функция fgets прекращает читать из сокета и завершает работу. Посмотрите выше есть вызов функции stream_set_timeout. Продебажте var_dump'ом что она возвращает.
0

#5 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 07 Март 2015 - 08:13

Registration / Spam service timing out on 3.4.7
1

#6 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Март 2015 - 11:18

Цитата

Настройки -> Пользователи -> Защита от Спама -> Лимит времени соединения с сервисом
Какое значение стоит?

15 сек

Цитата

Посмотрите выше есть вызов функции stream_set_timeout. Продебажте var_dump'ом что она возвращает.

var_dump('timeout = '.$this->timeout); var_dump(stream_set_timeout( $fp, $this->timeout )); die();

string(12) "timeout = 15" bool(true)

Цитата

для php нужно устанавливать curl

IP.Board должен корректно работать и без curl'а. Curl не входит в число обязательных требований к php:

/kernel/classFileManagement.php => classFileManagement::postFileContents():
if( ( $contents = $this->_getContentsWithCurl( $file_location, $post_array ) ) === false )
{
    $contents = $this->_getContentsWithSocket( $file_location, $post_array );
}


Цитата

У вас вообще-то копирайт IBR, насколько я знаю они юзают другой антиспам сервис.

http://forums.ibreso...ntispam-servis/

Да, но сейчас у меня этот сервис отключен из-за истёкшей активности лицензии. Плюс не установлен curl.
Почему-то не могут найти в настройках "Сервис мониторинга спама". Когда он отключен, так и должно быть ? В любом случае должны быть, как минимум, видимый раздел/настройки, касающиеся этого сервиса...
0

#7 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Март 2015 - 11:35

Просмотреть сообщениеnewbie 07 Март 2015 - 08:13 сказал(а):

Registration / Spam service timing out on 3.4.7

Вот это другое дело. Патч сабжевую проблему полностью устраняет.
Сейчас ответ от сервера fgets получает сразу (без всяких 15-секундных таймаутов). При этом в журнале появляются записи типа "0: Ошибка сервиса" (т.к. ключ истёк).

В любом случае, вернул исходный classFileManagement.php на место, т.к. патч - для версии 3.4.7, а у меня - 3.4.5 (могут быть глюки). Всё равно спам-сервис не работает.

newbie, вы знали про этот патч или нашли на invisionpower.com поиском ?
0

#8 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 07 Март 2015 - 12:10

Вот по этому и надо юзать curl, а не низкоуровневые сокеты где малейший баг и они отваливаются.

Просмотреть сообщениеcyrax_02 сказал(а):

В любом случае, вернул исходный classFileManagement.php на место, т.к. патч - для версии 3.4.7, а у меня - 3.4.5 (могут быть глюки).

Этот патч закрывает баг в логике бейсик авторизации через сокеты при пост запросе, его можно применять для всех версий.
0

#9 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Март 2015 - 12:15

Цитата

Вот по этому и надо юзать curl, а не низкоуровневые сокеты где малейший баг и они отвалятся.

В данном случае баг имеет место не в механизме сокетов, а в коде IP.Board.

Цитата

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

Особенности реализации (с точностью до строки кода) той же самой логики могут менять от версии к версии...
0

#10 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 07 Март 2015 - 12:25

Просмотреть сообщениеcyrax_02 сказал(а):

Особенности реализации (с точностью до строки кода) той же самой логики могут менять от версии к версии...

Если говорят что его можно применять для всех версий (3.4) это значит, что все изменения которые там есть не затрагивают основную логику скрипта. 3.4.7 в данном случае указано потому, что это финальная версия, и разработчики поддерживают только финальные версии линейки, а не выпускают отдельные патчи для 3.4.0, 3.4.1 и тд
0

#11 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Март 2015 - 12:29

Цитата

Этот патч закрывает баг в логике бейсик авторизации через сокеты при пост запросе, его можно применять для всех версий.

Баг исправлен в php-коде файла classFileManagement.php версии 3.4.7. При этом патч, помимо, собственное нового кода, содержит прочий (неизменённый) код версии 3.4.7. Следовательно, при замене файла версии 3.4.5 файлом патча версии 3.4.7 мы, помимо исправления бага, обновляем на новую версию весь прочий код этого файла.
0

#12 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Март 2015 - 12:33

Цитата

3.4.7 в данном случае указано потому что, это финальная версия, и разработчики поддерживают только финальные версии линейки, а не выпускают отдельные патчи для 3.4.0, 3.4.1 и тд.

Вашей логике противоречит патч 3_4_x_patch_nov_14, в документации к которому указывается не только последняя версия, а все версии движка, с которыми совместим патч
0

#13 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 07 Март 2015 - 12:36

cyrax_02 сказал(а):

помимо исправления бага, обновляем на новую версию весь прочий код этого файла.

siv1987 сказал(а):

Если говорят что его можно применять для всех версий (3.4) это подразумевает, что все изменения которые там есть не затрагивают основную логику скрипта.

Вы снова не хотите слушать.

newbie, попробуйте вы объяснить ТС'у почему именно 3.4.7, у меня больше нет сил.)
0

#14 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 07 Март 2015 - 12:43

Просмотреть сообщениеcyrax_02 сказал(а):

Вашей логике противоречит патч 3_4_x_patch_nov_14

Как раз наоборот. Потому что все патчи содержат код последних версий этой подверсии 3.x.x. Ставя патч на 3.4.5 вы обновляете файлом из последней версии 3.4.x.
Когда говорят что можно, значит можно. Версионные изменения которые там есть не затрагивают основную логику. В данном случае можно, хоть и не указан x.

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

#15 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 08 Март 2015 - 11:18

У меня только 1 вопрос: "cyrax_02, каким образом Вы устанавливаете патчи безопасности?". Там же тоже код от 3.4.7. А, учитывая то, что Вы используете локализацию от ибр, то вообще кричи "Караул!".
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна