Skip to content

Category Archives: php

Яндекс-like поиск своими руками

Классная статья на Хабре про то, как быстро слепить хороший поисковйы механизм.
Про учет морфологии я думал, что все намного сложнее. Оказывается, есть неплохие простые решения.
Ну а про soundex («возможно, вы искали?») вообще первый раз слышу. Все это очень интересно

Хабрахабр: Яндекс-like поиск своими руками.

P.S. Заодно, где-то рядом там нашел линк на «правильную» реализацию PHP-функции strip_tags. Так, на всякий случай в закладки.
P.S.S. Нашел забавный блог «Коротко и ясно». Просто полезные кусочки кода... Там есть и стеммер, который у слов корни вырезает, если вариант реализации русского soundex'а. Вроде, неплохо, попробуем почитать.

WordPress: постоянное подключение к mysql

Сделал WordPress'у persistent-connection к MySQL.
Стало в 5 раз быстрее.

Причем не нашел, как сделать это через «нормальные» настройки.
Залез в код да поменял. Интересно, почему выбрать-то не дают?..

wp-includes/wp-db.php, 61 строка.
Меняем mysql_connect на mysql_pconnect.

Всем клиентам Нашего Хостинга — советую :-)

IBM developerWorks Россия: Изучаем PHP

На сайте IBM developerWorks Россия появился интересный мануал «Изучаем PHP». 

Цель этого учебного пособия — научить вас писать на языке PHP приложения, поддерживающие workflow. Мы начнем с того, что научимся регистрироваться с определенным именем пользователя и паролем, загружать файлы на сервер из браузера, просматривать загруженные файлы. В дальнейшем для пользователей с административными полномочиями мы разработаем специальную процедуру одобрения документов для публичного доступа. В последующих двух частях этой серии (Часть 2 и Часть 3) мы рассмотрим HTTP-аутентификацию, использование потоков данных, обработку исключений и другие важные вопросы.

В первой части даются базовые понятия языка, на примерах объясняется синтаксис PHP; рассматривается создание базовой страницы, переменные, циклы и условные операторы if-then, массивы и функции, доступ к базам данных, включение файлов с помощью оператора include 

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

В третьей части описывается процедура добавления HTTP-аутентификации, потокового перемещения документов из каталогов, закрытых для доступа из сети, обработки исключений. Вводится понятие объекта и с учетом этого понятия изменяется структура приложения.

Короче, довольно кратко и интересно написано :) Почерпнул для себя много нового из второй-третьей части...

News / Дырка в PHP4,5

Для тех, кто не слышал — в PHP4/5 нашелся метод обходить ограничения, накладываемые директивой base_dir. А это значит, что можно написать нехороший скрипт, который будет работать с чужими файлами (ну а какие еще файлы могут быть в чужих папках?).

Решение простое. В списку запрещенных функций надо добавить symlink. Как это делалось — можно почитать в моей маленькой памятке по затыканию дыр.

Server / Памятка начинающим хостерам по затыканию дырок в PHP

Сегодня один перловщик спросил меня, а нельзя ли в PHP через suEXEC что-нибудь да как-нибудь запустить. Штудирование мануалов показало, что в случае mod_php нельзя, да и ненужно. Ну а в случае fastcgi — можно. И это хорошо, это безопасно, но сказка не о том, а о mod_php.
В мануале по PHP кроме функций exec и system, про которые я давно знал и вроде бы их запретил у себя на сервере, я нашел еще функцию popen. Я насторожился, потому что точно помнил — этой функции я в настройках PHP не запрещал!
Тут же из мануала был скопирован и запущен пример. Результат... удивил. Листинги большинства папок сервера, содержимое /etc/passwd, doc_root чужих виртуальных-серверов... Все это предстало перед моим взором :-) Конечно, виноват я. suEXEC'а нету, ведь нету же mod_php, да ну и не все файлы стояли с ограничением на чтение от all. Мой промах, признаю.

Вот код примера:

<? if(!isset($q)) { $q = 'ls -alp'; } ?><html>
<body>
<form method="post">
<input type="text" name="q" value="<?=$q?>">
<input type="submit">
</form>

<pre>

<?php
error_reporting(E_ALL);
$fp = popen($q, 'r');
$read = '';
while (!feof($fp))
{
$read .= fread($fp, 4096);
}
echo $read;
pclose($fp);
?>

</pre>
</body>
</html>

Мне это не понравилось и я полез в конфиг Апача httpd.conf. В список disabled_functions я дописал popen, перезапустился... Нулевой результат. Попробовал вызвать функцию exec — вызывается.

Шоковое состояние...

Что таким образом можно сделать?
Многое. Дело в том, что PHP запускается с правами Апача. А тем временем, Апач имеет доступ ко ВСЕМ файлам ВСЕХ виртуальных хостов. Такова необходимость, иначе он не мог бы их отображать и отдавать клиентам. Соответственно, их можно удалить. Этого мало, чтобы считать эту дырку критической?

Я не знаю, как дела обстоят у крупных хостеров, но почему-то мне кажется, что у 50% эта дырка есть (проверено на примере во время написания заметки)

Как же все-таки запретить пользователям виртуального хостинга через PHP делать гадости, а именно:
A) Читать чужие файлы из чужих папок
B) Вызывать любые системные функции
Continue reading ›