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

6 августа 2012 г.

Как установить и настроить NGINX+PHP+XDebug на Ubuntu 12.04

1. Установка NGINX-сервера:
sudo add-apt-repository ppa:nginx/stable 
sudo apt-get update 
sudo apt-get install nginx 


2. Установка PHP:

Если на вашем сервере php еще не установлен, то необходимо выполнить следующее:
sudo apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql

В противном же случае достаточно установить пакет php5-fpm:
sudo apt-get install php5-fpm


3. Настройка виртуального хоста в NGINX

Открываем и редактируем файл  /etc/nginx/sites-available/default:

sudo gedit  /etc/nginx/sites-available/default

Для начала поменяем параметры root и index в секции server:

server{
...
    root: /var/www;
    index: index.php
...
}

Если вы уже пользуетесь веб-сервером apache, то для правильной работы nginx нужно будет поменять номер порта с 80 на 8000:

server{ 
 listen: 8000;
...
}

Убираем комментарии со следующих строк:

 location ~ \.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 include fastcgi_params;
  }


4. Запускаем NGINX

sudo service nginx start

Также запускаем сервис, отвечающий за работу php:

sudo service php5-fpm start


5. Установка и настройка XDebug

Устанавливаем точно так же как описано в первой части статьи "Как настроить NetBeans для работы с XDebug"

Далее небходимо отредактировать файл /etc/php5/fpm/php.ini.
sudo gedit /etc/php5/fpm/php.ini


Перед тегом Date добавляем следующий код:
zend_extension="/usr/lib/php5/20090626/xdebug.so"

xdebug.default_enable = On
xdebug.var_display_max_depth=6
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9900
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir=/tmp/profiler
xdebug.show_local_vars=1
xdebug.overload_var_dump=1

... перезагружаем сервер


sudo service nginx restart


так как при перезагрузке сервера параметры php.ini автоматически не обновляются, необходимо также перезагрузить сервис php5-fpm:


sudo service php5-fpm restart


6. Настройка NetBeans

Открываем NetBeans Tools>Options>PHP>Debugging и в строке Debugger Port вводим значение 9900, нажимаем Ok.

На этом настройка завершена.

Осталось только поместить в /var/www тестовый файл index.php с кодом:

   

echo phpinfo();



14 ноября 2011 г.

Как настроить NetBeans для работы с XDebug

1. Для начала устанавливаем непосредственно сам XDebug:

Предполагается что Apache и PHP уже установлен (если нет, то самое время их установить). Далее устанавливаем необходимые библиотеки:

sudo apt-get install php5-dev php-pear

Теперь устанавлиеваем XDebug через PECL:

sudo pecl install xdebug


Ищем местонахождение файла xdebug.so

find / -name 'xdebug.so'

В моем случае путь к файлу был такой: /usr/lib/php5/20090626+lfs/xdebug.so

Открываетм и редактируем файл php.ini:

sudo gedit /etc/php5/apache2/php.ini


Добавляем перед тегом [Date] строку :

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"

и перезагружаем apache:

sudo /etc/init.d/apache2 restart


2. Настраиваем ХDebug

Теперь настроим XDebug для работы с NetBeans IDE. Для начала откроем файл php.ini и добавим после строки zend_extension=... следующие параметры:

xdebug.default_enable = On
xdebug.var_display_max_depth=6
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir=/tmp/profiler
xdebug.show_local_vars=1
xdebug.overload_var_dump=1


... перезагружаем apache:

sudo /etc/init.d/apache2 restart


Открываем NetBeans Tools>Options>PHP




Нажимаем ОК и смело пользуемся дебагером


17 апреля 2011 г.

PHP: Защита процесса авторизации от SQL-инъекций

Раньше, при разработки сайтов, никогда особо не акцентировал свое внимание на защиту от т.з. "SQL-инъекций". Что это такое думаю много говорить не стоит, просто процитирую, что об этом пишут на сайте php.net:

Принудительное внедрение вредоносных инструкций в SQL-запросы - методика, в которой взломщик создает или изменяет текущие SQL-запросы для работы со скрытыми данными, их изменения или даже выполнения опасных команд операционной системы на сервере базы данных. Атака выполняется на базе приложения, строящего SQL-запросы из пользовательского ввода и статических переменных.

Когда проект достигает определенного уровня популярности среди пользователей сети, появляются и "доброжелатели", которые всяческим образом пытаются найти уязвимости сайта. Жертвой одну из таких уязвимости и стал один из моих проектов.

Уязвимость была обнаружена в функции, обеспечивающий процесс авторизации администратора на сайте.  Для управления проектом был предусмотрен доступ для администратора через веб-форму на сайте приложения. Форма не отличалась особой оригинальностью: поле E-mail и поле Пароль. На серверной стороне для проверки валидности адреса єл. почты и пароля использовалась очень простая процедура: проверка наявности соответствующей записи в таблице пользователей базы данных. SQL-запрос имел следующий вид:


$email = $_POST['email']  
$password = $_POST['password'];
$query = "SELECT * FROM `users` WHERE `email`='" . $email . "' 
AND password='" . dohash($password) . "'"; 

Далее, если запрос возвращал хотя бы одно поле - пользователю автоматически давались права на управления контентом сайта. Если вы используете подобный метод авторизации последующая информация будет для вас полезной.

Ошибкой данного подхода есть отсутствие какой либо проверки значения вводимого в поле e-mail. Для того чтобы получить доступ к управлению сайта, при хорошем знании SQL, было достаточно воспользоваться следующей инъекцией: ввести в поле E-mail следующее значение "any@mail.ru' or 1=1 --" и указать произвольный пароль. При таком значении переменной $email, запрос гарантированно возвращал результат.

Самым простым способом избавиться от такого рода инъекций является использование хеш-функций для преобразования вводимых данных как на стороне PHP так и на стороне SQL-сервера. Например, можно использовать функцию MD5 MySQL () для создания хэш данных на стороне сервера, а также аналогичные функции на стороне PHP.

Таким образом, маленькие изменения запроса обеспечат защиту от инъекций.


$query = "SELECT * FROM `users` WHERE MD5(`email`)='" . md5($email) . "' 
AND password='" . dohash($password) . "'

25 марта 2011 г.

PHP: Проверка URL-адреса

Задача: необходимо проверить на валидность и существование URL, который отправляется пользователем через форму на сайте.

Для решения этой задачи написал простую функцию проверки, которую собственно и привожу ниже:

/**
     * Функция проверки URL
     *
     * @param  string $url
     * @return boolean
     */

    function checkUrl($url) {
  
        if (empty($url)) {
            return false;
        }        

        // проверяем строку на присутствие в ее начале 
        // протокола (http://|ftp://)
        if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
            $url = "http://" . $url;
        }

        // проверяем строку на присутствие в ней         
        // валидного URL'а
        if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) {
            // далее проверяем URL на существование...
            // нет необходимости полностью загружать сайт,
            // поэтому проверям только заголовки 
            return @get_headers($url);
        }

        return false;
    }

1 марта 2011 г.

Netbeans: подсветка синтаксиса при использовании файлов с нестандартным расширением

Если вы работаете с каким-то не стандартным расширением файлов (например, .ss - шаблоны SilverStripe), которого Netbeans "не знает", можно с легкостью настроить его на использование с правильной подсветкой синтаксиса.

Настройка подсветки синтаксиса в Netbeans для определенного расширения файлов


Открываем Tools -> Options -> Miscellaneous -> Files
Оставляем "File Extensions" как "< Choose the extension >" и нажимаем на кнопку "New" (справа).


Пишем расширение без точки.


Выбираем необходимый тып в списке "Associated file type (MIME)" 


Нажимаем "OK" и все готово.


9 декабря 2010 г.

Как настроить отправку почты средствами php-функции mail в Ubuntu?

Итак, задача: настроить на локальном сервере, под управлением ОС Ubuntu отправку почты стредствами php-функции mail().

1. Установка SendMail из репозитория Ubuntu
sudo apt-get install sendmail
2. Проверка работоспособность smtp-сервера при помощи коммандной строки и telnet-протокола
# telnet localhost smtp
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost6.localdomain6 ESMTP Sendmail 
8.14.3/8.14.3/Debian-9.2ubuntu1; Thu, 9 Dec 2010 15:31:17 +0200;
(No UCE/UBE) logging access from: localhost.localdomain(OK)-
localhost.localdomain [127.0.0.1] 
HELO localhost 
250 localhost6.localdomain6 Hello localhost.localdomain [127.0.0.1], 
pleased to meet you 
MAIL FROM: no-reply@gmail.com
250 2.1.0 no-reply@gmail.com... Sender ok 
RCPT TO: my_exist@gmail.com
250 2.1.5 my_exist@gmail.com... Recipient ok
DATA 
354 Enter mail, end with "." on a line by itself
test message
. 
250 2.0.0 oB9DVHsE004837 Message accepted for delivery
 В результате выполнения последовательности комманд на указанный емейл (my_exist@gmail.com) должно прийти сообщение ("test message").

3. Настройка php.ini
gedit /etc/php5/apache2/php.ini 
 Находим и редактируем следующую строчку

sendmail_path = /usr/sbin/sendmail -t -i 
4.  Проверка функции mail()
<?

 echo  mail ("my_exist@gmail.com","test message",
             "test message","From:no-reply@gmail.com");

?>
Настройка завершена

16 сентября 2010 г.

Как скачать дамп базы данных имея доступ по ftp?

Столкнулся с задачей, когда доступ к файлам проекта открыт только по ftp, при этом база данных находиться на другом сервере и доступ к ней ограничен. Возник вопрос: возможно ли получить дамп базы имея доступ по ftp?
Ответ очень прост: “Всё возможно верующему” (Евангелие от Марка 9:14-29)


Итак, что нам нужно будет сделать:


Шаг 1. Загружаем и устанавливаем последнюю версию программы EMS SQL Manager (http://www.sqlmanager.net/)


Шаг 2. В папке установленной программы (обычно c:\Program Files\EMS\SQL Manager for MySQL\) находим скрипт emsproxy.php и копируем его на наш хост по ftp. Единственное условие - чтобы была возможность прямого обращения к скрипту через УРЛ (напр.: http://www.myhost.com/emsproxy.php).

Шаг 4. Запускаем EMS SQL Manager и регистрируем новый хост ():
Указываем где установлена БД (ip-адрес или localhost - если доступно на том же сервере), а также логин и пароль для доступа к базе данных.
Соглашаемся использовать туннелирование (ставим галочку Use tunneling) и выбираем HTTP протокол для этого дела (HTTP tunneling). Далее...
Указываем URL к скрипту.
Далее...
Выбираем нужную нам базу данных.
Далее... переходим к следующему окну и заканчиваем (Finish).

Шаг 5. Делаем экспорт данных нашей базы.
Здесь все очень просто. В главном меню выбираем Tools > Extract Database, выбираем нужную базу и сохраняем в файл (не забыв при этом поставить галочку в поле Extract all metadata and data of the database).

С задачей справились - дамп получен. Помимо дампа, теперь имеем возможность управлять удаленной базой данных, что весьма и весьма полезно :)

P.S. Если на удаленном сервере используется СУБД Postgres можно аналогичным способом добыть доступ к БД используя программу SQL Manager for Postgres