Как защитить сайт от вредоносных атак?

Здравствуй, Тостер!

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

Понятно, что это далеко не последний раз. Будут и другие попытки взлома, нахождения эксплойтов и DDoS атак.
Так вот, Тостер, помоги нам. Сайт написан на PHP и на некоторых страницах присутствует AJAX. Писали всё сами и искать ошибки придётся самим.

С чего стоит начать? Какие страницы сайта наиболее подвержены атакам? Где проще всего допустить ошибки?
Какие методы защиты и проверки кода вы используете? Любые советы, истории и статьи приветствуются.
  • Вопрос задан
  • 937 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
1. Пользователь всегда врет. Все без исключения входящие данные ОБЯЗАТЕЛЬНО должны валидироваться, в случае ошибки - шлем на йух.
2. Для средних систем - вполне норм подход: во всех публичных методах выполнять обязательную проверку всех аргументов простых типов, чуть что не так - исключение. Так как проверок будет море - критично время их выполнения, можете посмотреть мой проектик: https://github.com/ko-ko-ko/php-assert

Пример использования:
/**
 * @param string $login
 * @param string $password
 * 
 * @return int
 * @throws \InvalidArgumentException
 */
public function login($login, $password)
{
    Assert::assert($login, 'login')->lengthBetween(4, 16);
    Assert::assert($password, 'password')->lengthBetween(6, 20);
    
    // Business logic here
}

Код конечно после таких действий не самый красивый, но надежный. В случае действительно крупного проекта - вполне норм делать проверки в приватных и защищенных методах. Многомерные массивы как аргументы методов можно использовать только в безвыходных ситуациях.
3. Гетеры и Сеттеры - обязательно. По хорошему классов с публичными свойствами быть не должно.
4. Права на запуск ТОЛЬКО у точек входа, например index.php.
5. Log - твой друг. Каждое исключение обязательно должно сохраняться для выяснения причин.
6. Жесткая блокировка типов запросов. Например на главной - только GET, на login - только POST.
7. По хорошему в мир должен смотреть только 80/443 порты.
8. Блокировка сканнеров - в случае подключения запросов на то, чего у вас нет публично, pma (phpmyadmin) например - банить по ip на час, или больше. *Если у вас таки есть публичный pma - сами себе злобные буратины))
9. По хорошему - стоит снимать метрики работоспособности вашей системы, например в zabbix, это косвенно решает проблему безопасности: отклонение метрик - маячок.
10. Система контроля версий на проде обязательна, но с заблокированным push + системные файлы vcs закрыты для мира.
11. Доступ к проду только у сисадмина и тим лида.
12. Ручные правки кода в не релизное время выполняет тимлид и только после апрува руководства. Эти правки ОБЯЗАТЕЛЬНО должны быть сохранены в репозиторий в ближайшее время, например в течении 3-х дней.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
nazarpc
@nazarpc
Open Source enthusiast
Если довольно просто грузят сервер - CloudFlare вам в помощь, а если сайт дырявый - то вам, наверное, специалиста нужно для анализа, ну и свои навыки повышать, чтобы сразу писать как положено.
Ответ написан
Комментировать
@Fly3110
web developer
Можно воспользоваться Acunetix Web Vulnerability Scaner. У него есть триал на 14 дней.
Ответ написан
Комментировать
sivabur
@sivabur
Заблокировали просто так!
Ну смотрите топ по количеству уязвимость по конкретной уже подчитывайите как она работает и какии способы защиты.
1. sql injection
2. xss
etc.

Так же желательно скрывать инфу о сервере.Какой язык используется/какая ос используется/используется ли апач или еще что то/подключить cloudfre etc. и потом сменить ип-его не будут знать извне/использовать последние версии php 5.5 5.6
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы