"Bash.org.ru IT Happens Истории ## 4801 – 4900" - читать интересную книгу автора (Bash.org.ru IT)

#4811: Показательная порка цифровых мародёров

12:00 29.11.2010, IT happens


Пожалуй, мало кто из относящих себя к IT не слышал о PHP. Лёгкость в освоении и способность прощать некритические ошибки сыграла с этим языком (или интерпретатором, как хотите) злую шутку: теперь все, кто смог написать «Hello World», могут гордо именовать себя Программистами, хотя и до кодеров им далеко. Вот и у нас в конторе есть такие экземпляры, обслуживающие корпоративный сайт-портал и несколько внутренних БД с веб-мордами. Итак, «вредные советы».


Локальная среда разработки Apache + MySQL + PHP для тестирования скриптов — излишество. Открываем файл прямо на FTP, редактируем, сохраняем. Если в код закралась ошибка, её будет видно. Всем и сразу. Подумаешь, несчастье: «HTTP 500» или «call to undefined function» посреди рабочего процесса у двадцати человек одновременно.


Базы данных и таблицы в них создаются в очень интересных комбинациях кодировок: MySQL запущен в Latin1, БД — в UTF-8, в которой таблица в CP1251, в которой поля в UTF-8 (как?!) хранят тексты опять же в CP1251. При этом взывающий к данным скрипт содержит ряд конструкций по конвертированию из одной кодировки в другую. Воркэраунд, блин.


Ах да, ложка мёда: отдельного юзера для пятка внутренних баз всё же завели... без пароля. Мы же изнутри к базе подключаемся! Если у вас входная дверь закрыта, то сейф можно не запирать, ага.


Входная дверь, то бишь авторизация на корпоративном сайте-портале (который одним портом смотрит в интернет) — отдельная песня. Пользователь авторизуется на контроллере домена, при этом ни имя, ни пароль не проходят ни «очистку», ни, на худой конец, проверку на длину. Ну да, уязвимость, но ведь никто ж не догадается! Регулярные выражения? Вы сейчас с кем разговаривали?


Если вдруг вам понадобится логин авторизовавшегося пользователя перевести в человекопонятное ФИО, то запрашивайте у контроллера домена подробную информацию сразу обо всех пользователях, включая все атрибуты. Подумаешь, надо распарсить массив на мегабайт-другой, — сервер не обеднеет! То, что у пользователей меняются атрибуты примерно каждое никогда, а количество изменяется от силы раз в месяц, навело бы на мысль о кешировании готового массива, но тут ведь думать надо. Но есть же сервер с гигом памяти — вот он пусть и думает, у него мозгов больше.


Разбирая вышеописанный массив, можно не заботиться о том, что индексом служит переменная, которая может быть NULL. Был бы C или какой другой язык — «access violation» или «index out of bound» гарантирован, но PHP это прощает, хотя и генерирует ошибку типа E_NOTICE: мол, обратите внимание. Отключаем показ ошибок — делов-то!


Человека, посвятившего программированию (в том числе на PHP) полтора десятка лет и рвавшего ягодицы ради доведения кода и вёрстки до стандартов, всё это заставляет просыпаться в холодном поту и идти за валерьянкой. После этого снится, что всех этих цифровых мародёров, разграбляющих системные ресурсы, посадили за «Поиск 8086» с 64 КБ памяти и приставили суровых советских Учителей-Программистов с плёткой, приговаривающих: «Много памяти не бывает! И процессорного времени — тоже!»