Настраиваем фаерволл для веб-сервера

Сервер в сети с открытыми портами — звучит не очень безопасно 🙂 В данной заметке вы найдёте отлаженные правила фаерволла для сервера, принимающего HTTP запросы и отдающего HTTP ответы, проще говоря, веб-сервера.

Вероятнее всего ваш веб-сервер крутится на Linux, а в Linux из коробки присутствует фаерволл netfilter. Для управления им используется утилита iptables.

Внимание: если вы не имеете непосредственного физического доступа к серверу, а работаете с ним удалённо через SSH, то прежде, чем приступать к настройке фаерволла, обратитесь к вашему хостинг-провайдеру с вопросом, сможет ли он восстановить доступ к SSH или предоставить альтернативу в случае, если вы нечаянно заблокируете себя.

Тем не менее, iptables сам не сохраняет введённые правила навсегда — они будут сброшены после перезагрузки. Чтобы настройки сохранялись нужно установить iptables-persistent отдельно. Но это в конце. Для начала следует сформировать и протестировать правила фаерволла, убедиться в работоспособности доступа к серверу по SSH, работы приложения веб-сервера (nginx, Apache) и т.п.

Читать дальше…

Отключаем запуск внешних программ через PHP

В PHP есть ряд функций, с помощью которых можно запускать внешние программы, в т.ч. через шелл.

Это очень полезная возможность при создании сервисов и других приложений посложнее сайтиков.

Но на серверах, на которых работают только типичные сайты (например, на CMF или CMS), данные функции могут быть использованы скрипт-кидди и прочими хакерами, эксплуатирующими уязвимости тех же CMS. И, даже ограничивая поле деятельности сайта в рамках его каталога хоста, с помощью запуска внешних программ разрушительные действия могут вырваться за пределы этой песочницы.

Читать дальше…

Как убрать сохранение прав доступа к файлам CHMOD в Git

Можно обнаружить, что по умолчанию Git сохраняет права доступа к файлам в коммитах, что может быть нежелательным, например, для каталогов временных файлов, кэша или конфигураций.

Чтобы отключить сохранение прав доступа к файлам (CHMOD) в репозиториях Git используйте эту комманду:

git config --global core.fileMode false

Но это подействует только для вновь клонируемых репозиториев. К сожалению, Git в конфигурациях всех локальных репозиториях добавляет опцию fileMode = true. Поэтому, придётся пройтись по всем локальным репозиториям (или написать скрипт) и ввести следующую команду:

git config --unset core.fileMode

Это уберёт из конфигурации локального репозитория опцию fileMode вообще. Тогда Git будет использовать настройку по умолчанию, заданную первой командой.

Как использовать php в консоли из MAMP

Пользуясь MAMP, вы могли столкнуться с ситуацией, когда php из терминала (консоли) имеет версию ниже той, что используется в MAMP. Например, при вызове composer, тот может ругнуться на несоответствие версии, требуемой пакетом и установленной, хотя у вас в MAMP PHP имеет версию >=7.0.8:


Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php >=7.0 but your PHP version (5.6.25) does not satisfy that requirement.
  Problem 2
    - Installation request for includen/money dev-master -> satisfiable by includen/money[dev-master].
    - includen/money dev-master requires php >=7.0 -> your PHP version (5.6.25) does not satisfy that requirement.

Читать дальше…

Touch Bar

А мне нравится новая фича в MacBook Pro 2016 — Touch Bar. На него можно повесить полезных функций кучу, не запоминая какая из F-клавиш за что отвечает или ползунки всякие, etc.

«Накипело»

Один идиот кривой конфиг выкладывает у себя в блоге, другие идиоты этот конфиг копипастят в своих. А то, что этот конфиг оптимизирован под FreeBSD или trusted прокси, никого блядь не волнует — все пихают его в свои обучающие статьи для Debian и Ubuntu, а документацию не читают вообще! И колесит это говно по интернетам.

Никогда не используйте NULL

Когда мы вместе с клиентами проводим код-ревью, регулярно наблюдаем одну и ту же картину, которую я считаю проблематичной во многих отношениях – использование null в качестве допустимого свойства или возвращаемого значения. Можно же сделать лучше.

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

Для чего это используется

Примером частого сценария использования может быть внедрение дополнительных зависимостей через метод класса:

class SomeLoggingService {
    private $logger = null;

    public function setLogger(Logger $logger) {
        $this->logger = $logger;
    }
}

 

В большинстве случаев logger будет установлен, но кто-то забудет об этом при использовании вашего сервиса. На сцену выходит второй разработчик и пишет новый метод в этом классе, используя свойство $logger. Во время разработки свойство всегда устанавливается и тестируется по соответствующим сценариям использования, так что разработчики забывают проверять на null – очевидно, это станет проблемой при других обстоятельствах. Вы полагаетесь на то, что методы будут вызваны в определённом порядке, который сложно документировать. Метод getLogger(), создающий нулевой логгер по умолчанию, мог бы решить эту проблему, но не гарантировано, поскольку второй разработчик может не знать об этом методе и просто использовать свойство.

Читать дальше…