Как обезопасить интернет магазин от взлома

Основные принципы безопасности не только интернет магазина а и любого сайта

май 15 , 2019

Так как у нас тематика сайта Opencart о нем и будет речь. Но все рекомендации на 100% подходят и для других движков. Скажу даже больше что для других движков, особенно Joomla и Wordpress, рекомендаций будет гораздо больше в силу их "дырявости".

Последнее время участились случаи взлома интернет магазинов на движке Opencart. Это и стало поводом для написания статьи об основах безопасности интернет магазинов. Всегда помните что интернет магазин это серьезный бизнес и обезопасить его надо также серьезно. Оставлять магазин без защиты это все равно что в офлайн магазине не закрывать двери.

Итак поехали. Ниже будут основные пункты которые надо проверить прямо сейчас. Рекомендации могут быть спорными, некоторые легкими а некоторые сложными, но конечное решение конечно за вами.

Доступная админка

Первое что надо это либо переименовать админку, либо сделать там набор секретную пару ключ - значение, не угадывая которую сайт будет отдавать 404 ошибку. Сделать элементарно. Также не стоит в robots.txt закрыть админку от индексации явно указывая к ней путь.

Ну и еще есть пару супер способов защитить админку. Самый легкий и мощный это защита директории админки с помощью  файла .htaccess где при входе будет предлагаться логин и пароль. Но максимальную защиту обеспечит полное удаление админки с сайта и перенос ее на другой хост! Но здесь надо при каждой установке модулей поплясать. Такое решение оправдывает себя на продакшене, когда все работы завершены. Но не знаю возможно ли просто взять и завершить все работы на сайте :) 

Логин/Пароль в админку

Наверное самый распространенный метод взлома интернет магазинов это подбор паролей в админку - брутфорс. Может прямо сейчас вашу админку кто-то брутфорсит пытаясь подобрать пароль на вход. Здесь надо понимать что в opencart-e нет никакой защиты от этого. Движок просто при неудачной авторизации отдаст ошибку и злоумышленник может сразу же отправить другие варианты логина и пароля. За секунду можно подобрать десятки или сотни паролей, все зависит от скорости ответа сервера.

Как от этого защитится. Первое правило - логин не должен быть admin. Делайте логин admin-ky-ky или super_admin а еще лучше Super_AdmiN64. И взломщику будет дилемма не то что бы пароль подобрать, сам логин будет неприступной крепостью.

И конечно же самое главное это мощный пароль по всем правилам безопасности. В пароле должны быть верхний и нижний регистр, спецсимволы и в длину минимум 8 символов. Например пароль admin2019 или admin123 подбирают за пару секунд. А хороший пароль H3%d_6_+dn!6#d взломать нереально.

Использование взломанных или дырявых модулей

Сам Opencart безопасный движок. Но его можно "разбезопасить" установив какой-то модуль с уязвимостью.  Как правило покупая модуль официально у автора в 99% случаях все будет отлично и модуль не будет иметь бекдоров или дыр. Да, есть тот 1%, но перед покупкой дополнения надо прощупать что и как что бы не попасться на тот 1%. В целом когда модуль официальный, да и еще не закодированный беспокоится не стоит.

Совсем другое дело обстоит когда в магазине установлены модули по "ВИП подписке", за 2-3 доллара, в складчину, нулленные и т.п. атрибуты взломанных модулей. В этом случае расчитывать на какой-то безопасность не стоит. Авторы дополнений очень много усилий тратят что бы сделать систему лицензирования модулей, но еще больше усилий стоит взломать эти модули. А это понятно что стоит денег. И просто так не будут ничего делать а потом отдавать за 2-3 доллара или же бесплатно.

Как правило такие модули взламывают, зашивают туда "левый" код (бекдор) и шифруют его что бы пользователь ничего до дня Х не догадывался. 

Что бы проверить нормальный ли сайт достаточно кликнуть слева в меню под поиском "Проверить сайт на пиратство" и ввести сайт.

Использование потенциальных уязвимостей на сайте

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

FTP и база данных без какой либо защиты и с простыми паролями

Очень часто администраторы ставят логин и пароль который можно подобрать. Рекомендуется делать тяжелый пароль и логин. Также что бы было все безопасно с этой стороны рекомендуется выключать все ftp доступы, а когда надо сделать какие-то правки, только тогда включать на время работ. Также достаточно эффективным методом является защита по ip для ftp подключения.

Открытые доступы к phpmyadmin, adminner и другим стриптам для работы с базой данных

Да, очень часто вижу на сайтах разные скрипты для работы с базой. Это надо все убирать что бы не было возможности зайти в сам phpmyadmin и т.п. скриптам. Например подобрав пароль в базу или иным способом попадая в базу злоумышленник через ту же систему модификаторов сможет загрузить на сайт любой шелл, дыру или другие плохие вещи. Мало того когда делают что-то плохое то по первых порах с сайтом ничего не происходит. Это нужно для того что бы вредоносный код успел "укорениться" в бекапы и после атаки в случае восстановления сайта из резервной копии плохой код также восстановится и вычистить его будет крайне сложно.

Хранение ftp доступов в настройках магазина в Opencart 2

Самое глупое решение с точки зрения безопасности это хранение ftp доступов в админке. В двойке из-за особенностей работы системы модификаторов на сайте по умолчанию надо прописывать доступы ftp. Но это крайне опасно. Ведь взломав админку хакер просто скопирует себе доступы ftp. В этой ситуации есть прекрасный модификатор LOCALCOPY который позволяет не вводя в настройки фтп доступы устанавливать модули.

Дача доступов разработчикам и не смена их после работ

Да, после того как на сайте поработали необходимо менять доступы в админку и фтп. Зачем это нужно? Здесь причин может быть несколько. Например разработчик резко на что-то обидится, станет неадекватным и решит напакостить. Второй вариант того что самого разработчика могут взломать и почитать переписку с вами. Вариантов много. Доступы фтп должны иметь только вы. И то в просто они должны быть выключены.

Вход на хостинг

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

Одинаковые логины/пароли на все сервисы

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

Пароль на почту

Очень важно иметь хорошую защиту на почте. Дело в том что взломавши email можно натворить много чего, увидеть какими сервисами пользуетесь, сделать восстановление пароля, да что угодно далее по цепочке.

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

Использование кода который поддатлив к sql инъекциям.

Часто разработчики пренебрегают безопасностью и когда пишут код запроса в базу данных не экранируют данные полученные с фронта. Например запрос SELECT * FROM product WHERE product_id = $product_id небезопасен т.к. поддатлив к sql инъекциям. Добавив на фронте в конце id товара "продолжение" запроса можно сделать выборку любых данных с базы. Да сделать можно все что угодно. Самым простым методом будет использования стандартного $this->db->escape и в нужных участках (int), (float) и т.д.

Открытый лог ошибок с фронта.

Размещение магазина рядом с другими сайтами, особенно если это Joomla, Wordpress и другие подобные уязвимые движки.


Статья наполняется...


Если у вас есть интересные наблюдения по этому поводу буду рад услышать их в комментариях. Давайте сделаем сайты безопаснее.