Виртуальные FTP-каталоги (ftp-директории)

Многие FTP-серверы для Windows позволяют создавать виртуальные FTP каталоги (т.е. директория находится, например в F:\music, а по FTP открывается в ftp://server.ftp/media/music )

Как в Linux разместить виртуальный каталог в нужной директории FTP-сервера?

Однако, такую задачу легко решить средствами операционной системы - просто монтируя виртуальный каталог…

mount --bind /media/media/music/ /home/ftp/music/

Для сохранения такого расположения после перезагрузки можно разместить в /etc/fstab примерно такую строку:
/media/media/music/ /home/ftp/music/ none defaults,bind 0 0

Ссылки по теме -
man fstab
man mount

Опубликовано Сентябрь 5, 2011 | автор: levik  |  Без комментариев »

Поиск шелл-скриптов (shell) на сервере и устранение последствий взлома

После взлома сайта злоумышленник как правило оставляет shell-скрипт, который позволяет удалённо выполнять различного рода команды.

Поиск Shell-скриптов на сервере можно осуществлять по различным параметрам - если взлом “свежий” это может быть дата изменения файла. Кроме того, как правило, в shell-скриптах присутствуют характерные команды. Для начала, следует выполнить поиск по каталогу с сайтом:

egrep -rlZ -e "gzinflate" /var/www
egrep -rlZ -e "eval\(str_replace" /var/www
grep -Rl "r57shell|c99madshell|eval\|base64_decode" /var/www
grep -RPn "(passthru|shell_exec|system|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile) *\(" /var/www

Ну и, конечно же, желательно найти “дырку”, через которую был осуществлён взлом - поиск в логах по имени вредоносных файлов.
# вместо shell.php подставляем имя файла с вредоносным
# кодом, который найден на предыдущем этапе
grep -rl 'shell.php' /var/log
#затем поиск в найденном файле
grep 'shell.php' ./mysite_custom.log
#и затем поиск по IP-шнику, с которого было обращение к вредному файлу
grep '127.0.0.1' ./mysite_custom.log

Конечно, это далеко не все способы, однако некоторые PHP-шеллы, а также “дырки”, через которые они были оставлены этот способ позволяет обнаружить.

Часто, PHP-шелл можно загрузить непосредственно на сервер (помимо проверки загружаемых файлов, для директорий загрузки имеет смысл выключать обработку файлов PHP, да и другие скрипты) - в .htaccess или в конфигурационном файле сервера (для Apache)
php_flag engine off
# или
RemoveType .pl .cgi .php .php3 .php4 .php5

И, конечно же, файл можно загрузить по FTP - используем рекомендации по хранению и созданию паролей

Опубликовано Сентябрь 1, 2011 | автор: levik  |  Комментарии (2) »

Валидный noindex - делаем тэг noindex валидным

Тег noindex, который закрывает своё содержимое от индексации валидным не считается. (Не путать с Meta-тэгом, который задает индексирование всей страницы поисковиками:

<meta name="robots" content="noindex,nofollow" />

Однако, иногда, в целях продвижения и SEO-шаманства требуется закрыть часть текста на странице от индексации. Как же быть?

1. Используем javascript для вывода неиндексируемого текста

Конечно, метод слегка извращенный, однако работает.. В своё время популярностью пользовались различные менюшки на javascript , ссылки в которых не индексировались поисковиками.. Приходилось добавлять ссылочки в подвал, или прятать в скрытый блок на главной странице… Кстати, содержимое тэга noscript яндекс также игнорирует (или нет), хотя google в noscript заглядывает… Надо бы проверить…

2. Используем валидный noindex №1

В разделе помощи Яндекс есть строчка, которая отвечает на вопрос о валидности noscript

<!--noindex-->текст, индексирование которого нужно запретить<!--/noindex-->

3. Валидный noindex №2

Не совсем документированный, но работающий (? опять проверка) метод… Использовался для закрытия от индексации до появления 2 варианта (noindex №1)

<del class="hide"><![CDATA[<noindex>]]></del> контент в noindex<del class="hide"><![CDATA[</noindex>]]></del>

Знаешь другие способы сделать noindex валидным? Поделись в комментарии =)

Опубликовано Август 10, 2011 | автор: levik  |  Без комментариев »

В IE не работает post в jQuery - callback в internet Explorer

Собственно, из названия несложно догадаться, что во всех браузерах $JQuery.post(…) работает нормально, а в Internet Explorer - не совсем. Если точнее - не вызывается callback-функция после отправки параметров на сервер (на сервере действия происходят - проблема только в вызове Callback)

Как правило, достаточно настроить сервер для отдачи соответствующих заголовков:

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header('Content-Type: text/html; charset=utf-8', TRUE);

Если ответ принимается в формате json -

header("Content-Type: application/json");
header("Accept-Charset: utf-8");

Еще довольно часто ошибка типа “в IE не работает, в остальных браузерах - работает” связана с наличием “лишней” запятой в массиве (запятую после последнего элемента массива Internet Explorer считает ошибочной). Не исключено, что проблема может быть в этом (правда, в этом случае и запрос не будет уходить).

Ну и ещё - в IE можно нажать F12 и воспользоваться инструментами для разработчика.

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

php - декодируем символы unicode

Для раскодирования символов Unicode в PHP можно воспользоваться следующей хитростью:

Для декодирования строки “\u0412\u0435\u0441\u0442\u0435\u0440\u043D \u041D\u0430\u0439\u0442\u0441″ можно сначала преобразовать ее в “Вестерн Найтс”, а потом воспользоваться html_entity_decode.

Код выглядит примерно так:

$s = '\u0412\u0435\u0441\u0442\u0435\u0440\u043D \u041D\u0430\u0439\u0442\u0441';
$s = preg_replace('/\\\u0([0-9a-fA-F]{3})/','&#x\1;',$s);
$s = html_entity_decode($s, ENT_NOQUOTES,'UTF-8'));

http://blog.peter.am/index.php/2011/05/28/php_unicode_decode

Опубликовано Август 1, 2011 | автор: levik  |  Без комментариев »

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

Для OSCommerce существует несколько готовых решений для организации скидок на своем сайте. Самый простой способ найти большинство дополнений (addon) - обратиться на официальный сайт.

http://www.oscommerce.com/community?contributions=&search=discount&category=all

Одной из самых популярных в последнее время считается возможность предоставлять скидку по кодовому слову (или по купону) - т.н. Discount Code. Модули для создания купонов на скидку есть и для OSCommerce-магазинов.

Модули скидки для OSCommerce

Персональная скидка - Customer specific discount ot_customer discount.php - позволяет устанавливать персональную скидку каждому клиенту.

Скидка в зависимости от количества товаров - Quantity discount ot_qty_discount.php - скидка в зависимости от количества купленных товаров

Скидка в зависимости от группы, к которой относится пользователь - ot_lev_discount  - позволяет определять скидку для группы. Пользователя можно отнести к одной из групп.

Структура модуля скидок для OSCommerce

Большинство скидок сделаны в виде модулей order_total (префикс ot_). Это значит, что скидка (без “доработок”) проявляется лишь во время окончательного оформления заказа, а также в письме с подтверждением заказа. Каждый модуль оформляется в виде отдельного класса с несколькими обязательными методами - install, remove, check, process.

Методы install и remove, как несложно догадаться отвечают за установку и удаление модуля соответственно (как правило, содержат операции вставки и удаления строк в таблице конфигурации)

Метод process отвечает непосредственно за обсчет скидки (глобальная переменная $order содержит информацию о заказе.. ) и за её отображение:

function process() {
$od_amount = $this->calculate_discount(); // функция подсчета ссылки.
//при необходимости можно использовать, например global $customer_id
$this->output[]=array( //массив, по данным которого формируется строка таблицы "итого"
'title'=>$this->title.':', // название скидки (персональная скидка, скидка за количество)
'text'=>$currencies->format($od_amount), // форматированное число с обозначением валюты
'value'=>
$od_amount //сумма скидки
);
$order->info['total'] = $order->info['total'] - $od_amount; //считаем итог
$order->info['subtotal'] -= $od_amount;//считаем подитог;
}

Предусмотрена возможность указания порядка обсчета скидок (равно как и других модулей order_total - доставка, налог) - для этого в методе-конструкторе следует задать $this->sort_order (как правило, с правой стороны -  define-”константа” в таблице конфигурации,  редактируется в админке на странице свойств модуля)

Опубликовано Июль 29, 2011 | автор: levik  |  Без комментариев »

Фишинг

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

При попытке войти на такой сайт под своим логином/паролем, данные отправляются на “фиктивный” сайт, к злоумышленнику. Именно такой способ получения конфиденциальных данных и доступа к ним называется фишингом.

1. Мошенники рассылают тысячи сообщений электронной почты на адреса, выбранные случайным образом. Эти сообщения выглядят как письма от известной компании.

2. В сообщении электронной почты Вас могут настоятельно призывать нажать на ссылку, чтобы обновить учетные данные. Ссылка приведет Вас на веб-сайт мошенников, который имитирует настоящий сайт компании.

3. На сайте мошенников Вас попросят предоставить конфиденциальную информацию. Вы думаете, что предоставляете информацию надежной компании, но на самом деле, ее получает преступник.

Если веб-сайт запрашивает ввод конфиденциальной информации, проверьте, что в адресной строке браузера адрес начинается с “https”. Несколько раз следует проверить адрес сайта - часто мошенники подставляют опечатки или похожие символы (I и l , tk вместо kt) Можно воспользоваться проверенным способом - ввести адрес в поисковике - поисковик, как правило, выдает на первом месте “истинный” сайт, а не фишинговый.

Браузеры последних поколений используют общую базу фишинговых сайтов - при попытке зайти на такой сайт пользователю показывается предупреждение о том, что сайт “не является тем, за кого себя выдаёт”…

Будьте бдительны

Опубликовано Июль 19, 2011 | автор: levik  |  Без комментариев »

Sphinx - установка

Установка Sphinx очень подробно описана на официальном сайте в Wiki

Установка Sphinx на Debian

Для Debian-систем разработчики предлагают использовать Debian-way. Однако, готового пакета нет - будем “готовить” на собственной машине.

$ sudo aptitude install libmysql++-dev libmysqlclient15-dev checkinstall
$
$ cd /tmp
$ wget http://sphinxsearch.com/downloads/sphinx-2.0.1-beta.tar.gz
$ tar -xzf sphinx-2.0.1-beta.tar.gz
$ cd sphinx-2.0.1-beta
$ ./configure
$ make
$
$ sudo checkinstall

checkinstall вывалит список опций.. рекомендуется внимательно отнеститсь к пункту 2 т.к. уже существует пакет sphinx2
2 - Name: [ sphinx-2.0.1-beta ]

Если при выполнении checkinstall выдал ошибку
Building Debian package... FAILED!
заглядываем в лог и видим такое:
Warning: The package version "beta" does not contain any digits . dpkg might not like that.
- изменяем версию на beta201, к примеру
3 - Version: [ beta201 ]

Установка Sphinx на Ubuntu

Установка Sphinx на Ubuntu рассмотрена совместно с установкой mysql. С предыдущим вариантом имеет довольно много общего. Специфичный момент (для раздела) - установка плагина ha_sphinx.so - смотреть раздел 3.4

mysql> show engines;
| SPHINX | YES | Sphinx storage engine 0.9.8 | NO | NO | NO |

Установка Sphinx на FreeBSD

Опубликовано Июль 14, 2011 | автор: levik  |  Комментарий (1) »

Как сделать ссылку `Сохранить как` на файл PDF, чтобы при нажатии файл не открывался

Как правило, при попытке открыть файл определенного типа (например, с расширением PDF), браузер вместо того, чтобы спросить пользователя “что делать с этим файлом - сохранить или открыть с помощью…” сразу же открывает файл, причем непосредственно в браузере.

Как сделать, чтобы при нажатии на ссылку появлялось окошко сохранить как?

Информация о том, какую программу использовать для открытия того или иного типа файлов хранится на пользовательском компьютере.. и какую программу использовать для открытия - задать с сервера мы не сможем. Однако, можно передать MIME-тип файла (как в статье про экспорт таблицы из PHP в Excel) при помощи отправки нужного заголовка. Для сервера Apache можно воспользоваться файлом .htaccess и директивой AddType. По умолчанию Web-сервер для .pdf-файла передаёт соответствующий тип:
AddType application/pdf .pdf

Если попробовать изменить его, например так:
AddType application/blabla .pdf
или вообще удалить:
RemoveType pdf

то браузер при открытии (если, конечно, он использует MIME-типы а не расширения файлов) файла незнакомого типа выведет окошко “сохранить файл как или открыть с помощью”

Однако, если пользователь привык к действию по умолчанию, то внезапное окошко “Сохранить как” может оказаться неприятным сюрпризом для него.

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

Опубликовано Июль 8, 2011 | автор: levik  |  Без комментариев »

Joomla Zoo (YT ZOO) - каталог-зоопарк универсальный

Joomla! Компонент универсального каталога  Zoo - очень удобный и настраиваемый “под себя” инструмент. Он позволяет создавать каталоги любых материалов (статьи, товары, файлы для загрузки..) неограниченной вложенности.

Подборка ссылок по ZOO:

http://www.yootheme.com/ - сайт разработчика. Там же можно бесплатно скачать последнюю версию ZOO. А вот желающим обзавестись неким ZOO App Bundle придется раскошелиться…

Шаблоны для ZOO расположены в каталоге “/media/zoo/applications/{НАЗВАНИЕ_ПРИЛОЖЕНИЯ}/templates/{НАЗВАНИЕ_ШАБЛОНА}/”. Для того, чтобы, к примеру, поменять местами описание категории и каталог товаров, особых знаний php и HTML не требуется, однако в любом случае рекомендую сохранять резервные копии.

Title для ZOO-категорий и элементов ”зоопарка” устанавливаются в файле
/components/com_zoo/controllers/default.php
в соответствующих методах - public function category() (доступна переменная $this->category) и public function item() ($this->item и $category) 

Опубликовано Июль 5, 2011 | автор: levik  |  Без комментариев »