PHP: Основы безопасности PHP

Данный материал для начинающих программистов.

СодержаниеДемонстрация ошибокregister_globalsSQL injection и magic_quotesПроверка данныхАутентификацияВыводДемонстрация ошибок

Почему так часто я вижу, зайдя на какой-нибудь сайт что-то подобное этому: Warning: Use of undefined constant LOCAL_SERVER - assumed 'LOCAL_SERVER' in /web/includes/page-definitions.php on line 13

Это одна из стандартных PHP ошибок, которая а) некрасива для пользователя; б) потенциально опасна. Поэтому их необходимо перехватывать и упорядочивать.

Во первых, функция error_reporting позволяет нам решить, какие ошибки мы хотим видеть. В принципе, достаточно просто выключить показ всех ошибок (error_reporting(0)), но нам нужно не это, потому что об ошибках мы хотим знать. Константа всех ошибок — E_ALL. В пятой версии появилась константа E_STRICT, показывающая строгие замечания по поводу кода. Разумеется, их желательно видеть, но они не входят в E_ALL, потому будем использовать числовое значение error_reporting(8191), которое вбирает всё, вплоть до новых ошибок шестой версии.

Примечание для любознательных: error_reporting(E_ALL | E_STRICT) не подходит, ибо тогда PHP 4 будет ругаться, не зная, что такое E_STRICT. С численным значением никаких проблем не будет.

Добавляем проверку на DEBUG — константу, выставленной в конфиге, и, с помощью set_error_handler, будем отлавливать ошибки в уже запущеном сервисе. Кстати, свой репортер ошибок должен возвращать true, иначе PHP выбросит стандартную ошибку.

Результат:
(Насчёт сравнения переменной с пятью параметрами я не уверен в выборе метода: in_array красивее, и гораздо медленее, а switch case case быстрее, но совсем некрасиво. Красота — субъективное дело...)

register_globals

До версии 4.2.0 директива register_globals была в PHP включена по умолчанию. Привело это к тому, что многие привыкли, что если в форме есть , то в PHP коде можно проверять if ($username == 'admin') ...

Однако это потенциальная дыра, которая привела ко множеству взломов. Поэтому к POST, GET, COOKIE переменным надо обращаться через superglobals $_POST, $_GET, $_COOKIE. Многим это показалось слишком трудно и стала очень популярной команда import_request_variables, возвращающая всё на круги своя. Так вот. Не делайте этого.

Другая проблема с register_globals:

Если пользователь — не администратор, а переменная $user_level не инициализирована (ей не придано значение 0 в начале скрипта, в надежде, что оно 0 автоматически), то нехороший человек может дописать в адресной строке foo.php?user_level=999 и получить доступ.

SQL injection и magic_quotes

Так популярна среди начинающих конструкция

Создаём функцию для фильтрации (mysql_real_escape_string - длинно, да и привязанно к формату проверки. А если понадобиться поменять фильтр?)

habrahabr.ru

  • CakePHP: Tips & tricks CakePHP #2
  • В связи с выходом пре-беты 1.2 второй выпуск tips&tricks. Продолжаем знакомить Вас с идеями и проблемами версии 1.2, особенностями пре-беты, с которыми мы встретились в процессе разработки социальной сети. Кроме того, мы завели себе блог на Хабре - присоединяйтесь, задавайте вопросы. Думаю, нам есть что обсудить.Новый core.php! Самое главное измение пре-беты – это новый формат файла core.php! Замените обязательно при обновлении этот файл и настройте его по усмотрению. В принципе, все описание
  • Ajax: AJAX для новичков
  • Сейчас в сети Интернет наблюдается очень активное развитие (и даже использование) новых технологий. Одна из таких технологий - AJAX.Что такое AJAX? AJAX - это аббревиатура, которая означает Asynchronous Javascript and XML. На самом деле, AJAX не является новой технологией, так как и Javascript, и XML существуют уже довольно продолжительное время, а AJAX - это синтез обозначенных технологий. AJAX чаще всего ассоцириуется с термином Web 2.0 и преподносится как новейшее Web-приложение. При исполь
  • PHP: Введение в Zend_Auth
  • В статье приведен обзор возможностей компоненты Zend_Auth, дающий общее представление о реализации пользовательской авторизации в приложениях на базе Zend Framework. В качестве основы приводимых примеров, использованы материалы статьи «Введение в Zend Framework». Примеры протестированы на Zend Framework версий 0.9, 0.9.1 и 0.9.2, и скорее всего будут работать с более поздними версиями, но не с более ранними. Автop: Рoб Алeн, http://akrabat.comОpигинaл:http://akrabat.com/zend-auth-tutorialПepe
  • Google: Google AdSense для мобильных устройств
  • Что ж, вот и появился русский AdSense для мобильных устройств. Работает сие чудо практически так же, как и AdSense для веба. С той лишь разницей, что AdSense для веба использует javascript, а AdSense для мобильников работает при помощи языков программирования:- PHP версии 4.3.0 или более новой - CGI/Perl версии 5.8 или более новой - JSP версии 1.2 или выше - АSP версии 3.0 или более новая версия В отличие от обычной версии в мобильной можно установить не более одного рекламного блока на страни
  • PHP: Tips & tricks CakePHP
  • Для тех, кто уже успел познакомиться с фреймворком.Гибкое управление связями По умолчанию, при поиске всех представителей модели, Cake ищет и все связанные с ней подмодели. Что бывает часто неудобно, поскольку число запросов резко увеличивается, как и число бесполезной информации. Это, конечно, можно решить стандартными средствами, типа $this->recursive в размере количества необходимых подуровней поиска (до 3 по умолчанию), но и это часто не помогает, т.к. бывает, что некоторые субмодели нужны

Leave a Reply

You must be logged in to post a comment.