среда, 9 сентября 2009 г.

Защищаемся с помощью htaccess или конфигурация Apache

Очень часто все попытки написать грамотный, хорошо защищенный скрипт сводятся на нет лишь тем что сервер, на котором крутится ресурс неправильно настроен. Или точнее некоторые просто игнорируют настройку сервера как вариант защиты, а это, на мой взгляд абсолютно не приемлимо. "Как же защитить свой ресурс?"-спросите вы,-"Ведь на сервере обыкновенного хостера, нет доступа к доустановке какого либо ПО, или к консоли." (в наше время консоль, к сожалению многих, предоставляют лишь на достаточно дорогих тарифах хостинга). Да, вы правы, если у вас нет консоли доустановить что-либо невозможно. Но вот сконфигурировать apache (web-сервер на котором крутятся очень многие хостинги) вполне в ваших силах с помощью волшебного файлика .htaccess Данный файл конфигурирует apache у вас на хостинге персонально для вас. Конечно, все настройки apache вы изменить не сможете, но в большинстве случаев это и абсолютно не нужно. Надо заметить что htaccess действует не только на ту дирректорию, в которой находится, но и на все каталоги ниже по древу, если конечно в них не лежит свой htaccess. Вот примерно так.

/.htaccess
/cat/.htaccess
/dir/
/dir/vigvam/

Здесь на каталоги dir распространяется действие "корневого" файла htaccess а в каталоге cat он свой. 
Ну что ж...куда класть файл мы примерно разобрались, давайте теперь посмотрим что в нем должно быть. Прежде всего в корневом файле htaccess мы можем назначить страницы ошибок, чтобы выводились наши страницы, а не дефолтные "апачевские".

ErrorDocument 404 http://badcode.net.ru/404/

В примере при ошибке 404 (Not found) будет перекидывать на адрес http://badcode.net.ru/404/
Кроме того в данном файле можно задать по умолчанию индексную страницу, т.е. ту страницу которая будет выводиться если не найдена например index.html или index.php

DirectoryIndex figvam.php

Данный файл будет выводиться при запросе к корневой дирректории файла по умолчанию. Так же своими htaccess можно переназначить индексные файлы для других дирректорий.
Ну и конечно, обязательно, на мой взгляд должен быть запрет выдачи листинга директории всегда. 

Options -Indexes

В некоторых дирректориях отдельно взятых CMS хранятся исключительно системные файлы, файлы библиотек или, если движок написан на файликах, возможно, какие-либо важные данные. Чтобы запретить доступ к данной дирректории с сайта в htaccess данной дирректории нужно добавить вот такую строку.

Order Deny,Allow 

Deny from all

Первая строка предопределяет состояние по умолчанию и может принимать значения либо Deny, Allow либо Allow, Deny а вторая строка полностью запрещает доступ всем к этому каталогу. Но иногда требуется открыть доступ, для определенных ip (если у вас дома статический айпи в админку сайта вы сможете попадать только с него если настроите данную функцию, это очень неплохо защищает например от брутфорсинга). Тогда следует сдалать примерно так:

Order Deny,Allow 

Deny from all

Allow from ip1,ip2

Где, ip1 и ip2 это айпишники с которых дозволен доступ. Но это далеко не весь спектр возможных настроек при помощи htaccess. Данный файл может конфигурировать php (если конечно php настроен на сервере как модуль apache, на большинстве хостингов это именно так). Например включить/отключить глобальные переменные.

php_flag register_globals off #отключили

Так же возможно включить или отключить magic_quotes

php_value magic_quotes_gpc off #отключили

У хорошего программиста пользователь никогда не видит ошибок в скриптах. А сделать это можно например так:

php_value error_reporting 0 # или
php_flag error_reporting 0

Но самой, на мой взгляд удобной особенностью является автоматическое добавление отдельного скрипта ко всем выполняемым:

php_value auto_prepend_file /home/www/user/htdocs/top.php

Т.е при запросе например к индексному php файлу будет сначала выполняться top.php. Адрес здесь должен быть от корня сервера.

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

вторник, 8 сентября 2009 г.

Учимся ходить

Не знаю как для вас, но для меня php был первым языком за который я взялся всерьез (барсик в школе не в счет). Сложно было понять логику языка. Приходилось продираться сквозь дебри операторов и переменных. Но потом постепенно становилось все легче и легче. Пока я не научился "интуитивно" чувствовать функции, воспринимать конструкции. Такое понимание далось после долгой работы с языком.. после понимания логики. Чего я и хочу в данной статье. Читатель должен получить фундамент. Ну, это все лирика...давайте приступим.



Прежде всего, вы должны четко понимать что php-язык серверный, т.е выполняется он целиком и полностью на сервере, генерирует данные которые надо и отдает их пользователю. После того, как данные переданы, их нельзя изменить без повторного обращения к серверу.[caption id="attachment_15" align="alignleft" width="300" caption="Схема Server(php) - пользователь(браузер)"]Схема Server(php) - пользователь(браузер)[/caption]



В чем же в таком случае удобство php? Да в том что его не надо компилировать, в него можно свободно интегрировать другие языки (JavaScript, HTML). Во многих самоучиителях, первым делом, рассматривается простейший вывод данных. Я не буду оригинален и поступлю так же на примере файла hello.php


  echo'Hello World!';
 ?>


Что же это за код? Давайте разберем по порядку. Прежде всего, мы должны дать понять серверу, что обрабатывается php код для этого мы и открываем треугольную скобку со знаком вопроса и надписью php. После вызываем оператор (функцию) вывода строки на экран echo. Ну и дальше идет текст котрый будет выводиться. В нашем случае это 'Hello World!'. Данный текст должен обязательно обрамляться либо одинарными либо двойными кавычками. Какая разница, спросите вы, какие кавычки? Об этом я расскажу в дальнейшем. Окончание действия каждого оператора в php выделяется ; т.е если мы не хотим чтобы действие оператора распространялось на дальнейший код, мы ставим точку с запятой. Ну и в конце мы закрываем нашу треугольную скобку, давая понять машине, что далее ничего интерпритировать не надо. Вот собственно и все. Ваш первый скрипт претворен в жизнь, поздравляю.