Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Пишем свой стартап: основы безопасности

by
Read Time:8 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Issue Tracking and Feature Planning
Building Your Startup: Ajax for Meeting Times and Places

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Этот учебник является частью серии Пишем свой стартап на PHP на Envato Tuts +. В этой серии я показываю вам запуск приложения от самой концепции до реального приложения, используя приложение «Планировщик встреч» в качестве примера. На каждом шаге я буду выкладывать код планировщика собраний в качестве примеров с открытым исходным кодом. Я также рассмотрю связанные с запуском бизнес-вопросы по мере их возникновения.

Рабочий сервер для Планировщика собраний в настоящее время работает в Digital Ocean (см. другие уроки о нем в Envato Tuts +.) В сегодняшнем эпизоде мы погрузимся в основы безопасности веб-сервера. Я расскажу о том, как обеспечить поддержку Linux VPS Meeting Planner и о некоторой базовой безопасности Yii. В следующем эпизоде я буду больше погружаться в программную защиту приложений Yii.

Я участвую в комментариях ниже, поэтому, пожалуйста, поделитесь своими отзывами. Пожалуйста, дайте мне знать, если остались темы безопасности, которые я пропустил. Я также открыт для новых идей и предложений для будущих учебников.

Напомним, что весь код Планировщика собраний написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2.

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

Хостинг и безопасность VPS

Общие ресурсы

Если вы используете общий Linux VPS, вы можете просмотреть мой предыдущий учебник Envato Tuts + «Защита вашего входа на сервер». Он охватывает ряд шагов, которые мы рассмотрим сегодня, включая безопасность SSH и брандмауэры.

Digital Ocean также является отличным ресурсом для практики безопасности. Введение в обеспечение безопасности вашего Linux VPS - один из лучших обзоров, которые они предлагают. Кроме того, у них отличная графика.

Startup Series - 7 Security Measures via Digital Ocean - graphic of Hun-like invadersStartup Series - 7 Security Measures via Digital Ocean - graphic of Hun-like invadersStartup Series - 7 Security Measures via Digital Ocean - graphic of Hun-like invaders
7 мер безопасности Digital Ocean для защиты ваших серверов

Вот три других статьи, которые они предлагают и которые я использовал в этом уроке:

Обновление сервера

Во-первых, очень важно, чтобы ваш сервер обновлялся с регулярными обновлениями. Это интегрирует исправления безопасности от поставщиков программного обеспечения (и с открытым исходным кодом), которые вы используете.

Вот основные шаги - вы, вероятно, будете с ними знакомы:

Функция dist-upgrade использует некоторые сведения для управления взаимозависимостями обновленных пакетов:

Чтобы убедиться, что изменения вступает в полную силу, вам может потребоваться перезагрузка. Я всегда останавливаю свою базу данных, а затем перезапускаю:

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

Настройка входа в SSH

Startup Series - SSH Key AuthenticationStartup Series - SSH Key AuthenticationStartup Series - SSH Key Authentication
Система безопасности Digital Ocean's 7 для защиты ваших серверов

У вас есть возможность использовать свой секретный ключ при создании дроплета Digital Ocean. Когда я настраивал Планировщик собраний, я повторил шаги, которые я изложил здесь: Защита входа на сервер.

Я также перевел SSH-логин на пользовательский порт, вместо обычного порта 22.

Настройка брандмауэра

Startup Series - Firewall Request FilteringStartup Series - Firewall Request FilteringStartup Series - Firewall Request Filtering
Система безопасности Digital Ocean's 7 для защиты ваших серверов

Затем я установил UFW, несложный брандмауэр:

Однако я не ответил «да» на эту просьбу. Предупреждение напомнило мне дважды проверить все мои требования SSH.

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

Затем я установил sudo-запрос на будущее, чтобы отключить UFW, если мои настройки были неправильными:

Затем я включил UFW и выполнил оставшиеся настройки:

Вот результаты:

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

Я также отредактировал конфигурацию UFW, чтобы включить брандмауэр при перезапуске сервера:

Из-за команды delayed disable  через пять минут мне пришлось снова включить UFW.

В дополнение к моей статье о защите вашего входа на сервер, руководство Digital Ocean UFW Essentials: общие правила и команды брандмауэра и настройка брандмауэра с помощью UFW на облачном сервере Ubuntu и Debian полезны при настройке UFW.

Настройка SSL

Startup Series - Lets Encrypt New Certificate Authority Free Automated and OpenStartup Series - Lets Encrypt New Certificate Authority Free Automated and OpenStartup Series - Lets Encrypt New Certificate Authority Free Automated and Open

Для безопасности людей, использующих Планировщик встреч, я также настроил SSL, как описано в «Использование шифрования SSL с вашим проектом WordPress».

И, вы можете заметить, я разрешил доступ https на порт 443 при настройке брандмауэра выше. Запросы на http://meetingplanner.io автоматически перенаправляются на https://meetingplanner.io.

Начало работы с безопасностью приложений Yii2

Помимо основы безопасности Linux, нам также необходимо задуматься о защите Yii Framework поверх PHP. Вы можете прочитать Программирование с Yii2: Безопасность, большинство из этого мы рассмотрим в следующем эпизоде.

Однако сегодня мы реализуем некоторые основные функции контроля доступа для Планировщика собраний.

Контроль доступа

Одним из первых преимуществ использования фреймворка PHP MVC является то, что все запросы на страницы маршрутизируются через один файл index.php. Как я описал в Программирование с Yii2: Маршрутизация и создание URL, Yii тщательно управляет входящими запросами на страницы и направляет их к соответствующим контроллерам и методам действий.

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

Как описано в учебнике по безопасности Yii2, Yii имеет множество вариантов управления доступом. Планировщик встреч в основном использует возможности контроля доступа.

Обеспечение запросов на внешнюю заявку

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

Поведение доступа защищает все методы, указанные в 'only'. actions, перечисленные в roles '@', требуют аутентифицированных пользователей, другими словами, только те пользователи, которые вошли в систему, могут видеть эти страницы. Пользователи, которые не вошли в систему, по умолчанию перенаправляются на главную страницу. Однако страницы с roles '?' полностью открыты.

Так, например, только аутентифицированный пользователь может create собрание, но каждый может войти в приложение через URL meeting/command. Это потому, что мы широко используем URL-адрес команды в электронных письмах, и у него есть еще один уровень аутентификации, описанный в учебнике «Доставка приглашений».

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

Защита запросов Back-End

Для внутренней системы Планировщика собраний доступ к этим страницам могут получить только администраторы. Поскольку администраторы обозначены в нашей таблице пользователей специальным, специфичным для приложения способом, мне пришлось создать настраиваемое правило доступа для их проверки. Основные роли Yii поддерживают только аутентифицированные @ и неаутентифицированные?.

Давайте посмотрим на встроенный MessageController для отправки обновлений по всему сайту нашим пользователям:

Пользовательское правило гарантирует, что пользователь не является гостем и передает isAdmin(), прежде чем перенаправлять их на правильное действие. Другие пользователи перенаправляются на главную страницу входа в систему.

Сегодня мы многого достигли, но многое еще предстоит сделать.

Заглядывая вперед

Если вы запустите сервер, вы, вероятно, оценили сегодняшний обзор базовой безопасности Linux и хостинга. В следующем эпизоде мы рассмотрим шаги, связанные с безопасностью, более тесно связанные с Yii Framework и приложением Planner Meeting.

Следите за предстоящими учебными пособиями в разделе «Пишем свой стартап на PHP». Есть еще несколько больших функций.

Ссылки по теме

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.