Архив рубрики: ‘Защита от взлома’
Ошибки в PHP. Вывод, перехват, скрытие.
Ошибки, могут быть как друзьями программиста так и его врагами. Как говорится у каждой стороны две медали.
Насколько часто вы бьетесь над программой, восклицая про себя: “Чего же ей еще не хватает?!”. Помню, когда я был новичком, в самом начале пути познания PHP, у меня это было довольно часто, пока я не научился читать и понимать ошибки. Не стоит воспринимать ошибку как препятствие. Это подсказка для вас. Описание проблемы. Намного легче заниматься отладкой когда, если что-то не работает, видишь ее перед глазами. Поэтому, во время отладки стоит их включать если они отключены. Включаются ошибки достаточно просто. Можно включать их как через .htaaccess так и с помощью самого PHP кода. Подробнее »
Защищаемся с помощью 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
Защита от злоумышленника или фильтруем все.
Одной из важнейших задач встающих перед начинающим разработчиком php является защита от взлома кода. Взломать конечно можно по разному, но в большинстве случаев взлом происходит из-за невнимтельности(читайте усталости, ваш покорный слуга круглыми ночами в свое время занимался разработкой проектов в следствии чего под утро писал такой код что на след…вечер было самому страшно смотреть) программиста. Важнейшее правило-фильтруйте любые приходящие от клиента. Будь то e-mail, обычный текс, число, браузер, или даже IP. С числовыми данными все просто. Для того чтобы быть точно уверенным что число “не грязное” надо всего лишь четко задать тип данных в переменно-int или привести ее к целочисленному значению (intval). Приведу небольшой пример:
|
Ну с числами вроде все понятно. Как же фильтровать текстовые данные? я видел много различных способов защиты от разных ухищрений приведу сейчас самый распространенный, который защищает исключительно от MySQL иньекций. (MySQL иньекция это выполнение запроса в БД с данными или параметрами которые могут помочь получить злоумышленнику какую-либо закрытую информацию или обновить данные в БД. О базах данных подробнее опишу позднее.) Вот пример чтобы сразу было ясно.
|
Функция mysql_real_escape_string экранирует все спецсимволы MySQL в строке. (Надо заметить что чтобы не было двойного экранирования нужно чтобы были отключены magiq quotes на сервере) Ну, а htmlspecialchars просто превращает символы ‘<','>‘,’&',’”‘ в html сущности (чтобы потом при выводе страницы не заморачиваться с фильтрацией данных). Вот так вот) И не блондинки вам на сайт и не хакера)