Преобразование ошибок в PHP в исключения

Навеяно этим сообщением на форуме.

Дано:

  • фреймворк перехватывает все возникающие ошибки (которые разрешены текущим значением error_reporting()) и аварийно завершает работу скрипта (в целях отладки/безопасности/нужное подчеркнуть);
  • имеется код, вызывающий -функцию, которая может сгенерировать предупреждение (в оригинальном сообщении это mkdir() — кидает E_WARNING, если не удаётся создать каталог)
  • местные стандарты кодирования запрещают использование оператора @ (довольно распространённая практика).

Требуется обработать возникшую ошибку без авоста скрипта. Далее »

Автор: , опубликовано в: PHP, комментариев: 8
17
Авг
2011

AOL Postmaster взломан!

Ибо нефиг себя по-свински вести.

Далее »

Автор: , опубликовано в: Безопасность, комментариев: 4
13
Авг
2011

Перехват фатальных ошибок в Yii

Как и , помогает разработчику, отлавливая неперехваченные исключения и ошибки в коде. Как и в , реализуется это одинаково — через функции set_exception_handler() и set_error_handler(). Но, в отличие от Kohana, Yii не умеет перехватывать фатальные ошибки (E_ERROR в терминах PHP).

Как следствие, если приложение сгенерирует фатальную ошибку (например, вызов несуществующей функции), у разработчика все шансы об этом не узнать (например, на production-сервере с display_errors установленным Off). Конечно, если приложение хорошо протестировано шансы возникновения такой ситуации близки к нулю, но если приложение позволяет пользователю устанавливать какие-либо свои дополнения, то лучше узнавать о проблемах прежде, чем начальник получит кучу гневных писем :-) Далее »

Автор: , опубликовано в: Yii, комментариев: 1
7
Авг
2011

Вложенные транзакции в PDO

В есть такая особенность: отсутствие поддержки вложенных транзакций.

Вложенные транзакции бывают весьма полезны: например, у нас есть два сервиса, которые могут взаимодействовать между собой. Сервис А начинает транзакцию, что-то делает, затем вызывает сервис Б, затем подтверждает транзакцию.

Может так случиться, что сервисы А и Б разрабатываются разными людьми и разработчик сервиса Б может не знать, что сервис А уже начал выполнение транзакции. Как следствие, при использовании PDO как только сервис Б попытается начать транзакцию, PDO выбросит исключение, предупреждающее о наличии активной транзакции.

Тем не менее, такие СУБД как и поддерживают вложенные транзакции (о чём PDO не знает). Поэтому было бы неплохо добавить поддержку вложенных транзакций для данных СУБД в PDO. Далее »

Автор: , опубликовано в: PHP, комментариев: 4
6
Авг
2011

Ставим спам в комментариях на службу людям

Я давно получаю по несколько тысяч -комментариев в день (не то, что мне он мешает — система его отсеивает полностью автоматически) и, как следствие, давно думаю о том, как заставить этот служить людям.

Начиналось всё созданием чёрных списков типа DNSBL (сюда попадали -адреса спамеров) и URIBL (а сюда — рекламируемые домены), но на раскрутку очередного чёрного списка (а также на его поддержание) банально не было ни сил, ни времени.

Закончилось всё тем, что я прекратил заниматься велосипедостроительством, зарегистрировался на Stop Forum Spam и теперь отсылаю весь полученный спам туда. Хотя я не во всём согласен с SFS, положительным моментом является то, что списки спамеров мониторятся (пример 1, пример 2). Хотя Spamhaus о себе тоже много думает (блокировать почту на основании того, что с данного IP-адреса идёт форумный спам — бред), тем не менее, у Spamhaus больше шансов прикрыть спамера, чем у простого блоггера.

На этом лирическое отступление закончено, далее идёт рассказ о том, как автоматически сообщать об автоматическом спаме в , ибо чем больше отчетов они получат, тем быстрее спамер будет остановлен. Далее »

Автор: , опубликовано в: WordPress, комментариев: 8
6
Авг
2011

Корейцы разбушевались…

Сегодня с утра наблюдается какая-то повышенная активность хакеров с корейскими -адресами.

Были замечены попытки подбора паролей на со следующих IP-адресов:

14.36.36.243 14.32.0.0/11
14.42.239.118
59.2.171.221 59.0.0.0/11
59.2.184.48
59.17.15.76
59.29.157.41
61.76.108.200 61.72.0.0/14
119.195.195.78 119.192.0.0/11
119.199.168.176
121.131.45.67 121.128.0.0/11
121.146.29.82
121.159.193.229
121.165.92.190 121.160.0.0/11
121.169.48.28
121.187.210.87
175.209.131.3 175.192.0.0/12
220.73.5.10 220.72.0.0/12
220.82.171.129
221.153.60.141 221.144.0.0/12
222.97.10.66 222.96.0.0/12

Далее »

Автор: , опубликовано в: Безопасность, комментариев: 5
5
Авг
2011

Как подружить bzr с самоподписанными SSL-сертификатами

Симптом: при выполнении команды вида

[-]
View Code Bash
bzr branch https://example.com/ trunk

выдаёт ошибку:

bzr: ERROR: Connection error: curl connection error (server certificate verification failed. CAfile: /etc//certs/ca-certificates.crt CRLfile: none)
on ://example.com/.bzr/smart

Есть два метода исправления проблемы. Далее »

Автор: , опубликовано в: Администрирование, комментариев: нет
18
Июл
2011

Интеграция LFD с blocklist.de

(Login Failure Daemon) — модуль замечательного пакета (ConfigServer Security and Firewall), отвечающий за анализ системных журналов и блокировку потенциальных взломщиков.

CSF умеет отправлять отчёты об атаках в формате X-ARF (в виде, пригодном для перенаправления отчёта в отдел жалоб и нарушений провайдера атакующего). Но иногда хочется сделать добро окружающим людям — чем быстрее узнают о потенциальном взломщике и заблокируют его -адрес, тем меньше вреда он успеет нанести.

Один из сервисов, занимающихся публикацией IP-адресов всяких взломщиков — это Blocklist.de. Этот сервис очень хорошо интегрируется с Fail2Ban, но существует и возможность посылать отчёты и без Fail2Ban. Далее »

Автор: , опубликовано в: Администрирование, Безопасность, комментариев: нет
17
Июл
2011

Скрипт для извлечения контактной информации из Abusix

Когда малолетние скрипт-киддисы и другие нехорошие личности совсем достают попытками подбора пароля к , сканированием портов и прочей гадостью, бывает совсем неплохо сообщить об их действиях их провайдеру. Здесь возникает вопрос получения контактной информации технической поддержки провайдера/хостера нарушителя по его -адресу. И хотя данная информация является общедоступной (её можно извлечь из данных whois), на практике автоматизировать разбор записей whois не всегда тривиально (abuse-контакт может находиться как в e-mail, remarks, так и в любой другой секции, причём правильным может быть только один адрес).

К счастью, есть два сервиса, позволяющие получить контактную информацию техподдержки по IP-адресу или имени домена:

  1. Network Abuse Clearinghouse — определение контактной информации по домену нарушителя. В основном используется для сообщений о спаме. Проблема в том, что если контактный адрес не зарегистрирован, будут предложены контакты abuse@ и/или postmaster@, что не эффективно, если нарушителю принадлежит весь домен.
  2. Abuse Contact DB — определение контактной информации по IP-адресу нарушителя. Данный сервис «назначает ответственным» не владельца домена, соответствующего IP-адресу, а его провайдера или хостера, что во многих случаях предпочтительнее.

Оба сервиса поддерживают -запросы в стиле RHSBL (abuse.net) и DNSBL (abusix.org). Далее »

Автор: , опубликовано в: Всё подряд, комментариев: 1
26
Июн
2011

php: symbol zlibVersion, version libmysqlclient_16 not defined in in file libmysqlclient.so.16 with link time reference

Не везёт мне с на

Ситуация: имеется сервер на CentOS с установленной CPanel. PHP в случайные моменты времени завершается с ошибкой вида

php: relocation error: php: symbol zlibVersion, version libmysqlclient_16 not defined in in file libmysqlclient.so.16 with link time reference

Вместо zlibVersion может быть другое имя, например crc32.

Из-за CPanel/WHM возможности ограничены опциями, предоставляемыми EasyApache — обновить /PHP штатными средствами (например, через yum) не представляется возможным из-за риска сломать CPanel. Далее »

Автор: , опубликовано в: Linux, комментариев: 1
30
Май
2011