Безопасность фронтенда: как защитить сайт от типичных атак
Интернет — неотъемлемая часть жизни. Мы храним в сети личную информацию, совершаем покупки, ведём бизнес и общаемся с друзьями. Однако вместе с удобством использования цифровых технологий растёт и количество атак, которые могут поставить под угрозу безопасность данных. Уязвимости приводят к утечкам информации или захвату аккаунтов. Привет, меня зовут Владимир и я разработчик в компании SimbirSoft. В этой статье предлагаю рассмотреть самые распространённые атаки на фронтенд и практические способы защиты от них.
Область информационной безопасности постоянно растёт, законодательство для защиты данных и инфраструктуры развивается. Оно выражается в нормах федеральных законов, разработкой дополнительных нормативных поправок и актов, а за их нарушение предусмотрена административная ответственность. Компании и бизнес призывают расширять обязанности по обеспечению безопасности своих систем. Все эти правила помогают избежать штрафов и юридических последствий: лучше обеспечить все возможные способы защиты сегодня, чтобы уже не думать о решении проблем завтра.
Однако никто не застрахован от утечки данных. В любом проекте могут возникнуть уязвимости, которые неизбежно приведут к компрометации пользовательских сессий и даже полному захвату аккаунтов. Одна из самых распространённых угроз — межсайтовый скриптинг (XSS).
XSS или Cross-Site Scripting — это способ внедрения стороннего кода в приложение с целью кражи данных или подмены логики. Для защиты от таких атак можно экранировать специальные символы. Например, преобразовать специальные символы < > ” ’ & на закодированные < > " ' &. Браузер отобразит их как обычные символы. В такие фреймворки, как Angular, React и Vue, инструмент экранизации уже встроен опционально.
Что ещё можно сделать? Настроить заголовок «Content-Security-Policy» (он позволяет определить браузеру разрешённые источники на загрузку скриптов) или использовать специальные библиотеки (например, DOMPurify, она очищает код от опасных элементов).
Атака CSRF
Еще одна распространенная атака — межсайтовая подделка запроса: CSRF (Cross-site request forgery). Это атака, при которой мошенники путём фишинговых сайтов, используя cookie и токены, получают доступ к пользовательским ресурсам и возможностям. Например, перевод денег или смена пароля без ведома пользователя.
Для защиты от таких атак можно использовать CSRF-токены (уникальный, случайный ключ, который сервер генерирует для каждой сессии пользователя) или SameSite cookie (эта опция для файлов cookie предотвращает передачу файлов cookie от одного сайта на другой). Желательно не прибегать к методам запроса на сервер GET: для записи данных лучше использовать POST. При этом все запросы без токена с сайта злоумышленника будут заблокированы.
SQL-инъекция
SQL-инъекция — вредоносный код. Представляет собой атаку на базу данных с возможностью создания, удаления, изменений и кражи данных. Наиболее распространённый вектор атаки через входные данные (формы авторизации, текстовые поля, загрузка файлов и так далее).
Методы защиты: подставлять данные в запрос через placeholders (подготовленные выражения), использовать идентификаторы и ключевые слова только из белого списка, прописанного в коде; экранировать входные данные (преобразование несущих опасность символов); ограничивать права доступа (учётная запись базы данных, которую использует веб-приложение, должна иметь только те права доступа, которые ей действительно необходимы для работы); использовать веб-файрвола (WAF), который анализирует входящий трафик и блокирует сомнительные запросы.
Clickjacking
По сути, это механизм обмана, манипуляция событиями пользователя (клик мышкой, нажатие клавиш или другие). Злоумышленники без ведома пользователя могут оформить услугу, украсть данные, загрузить вредоносную программу.
Для защиты от таких атак можно:
а) избегать использования <iframe> (окно водного продукта внутри другого);
б) использовать X-Frame-Options и атрибут sandbox для <iframe>.Также не стоит забывать про атрибут SameSite для защиты cookies.
Также не стоит забывать про атрибут SameSite для защиты cookies.
MITM-атака
Man-in-the-Middle — «человек посередине». Злоумышленник незаметно вмешивается в связь между двумя сторонами, перехватывает и изменяет коммуникацию между ними, используя такие методы, как ARP-спуфинг (атака подмены MAC-адреса) и DNS (подмена DNS-ответов). Злоумышленник может перехватить и использовать учётные или финансовые данные для манипуляций продуктом пользователя.
Избежать перехвата информации можно, используя протокол HTTPS (безопасная версия протокола HTTP, шифрует данные между браузером пользователя и сервером); надежные и защищенные сети WiFi, VPN, антивирусы, использовать многофакторную аутентификацию, выходить из важных веб-сайтов. И важно помнить об осторожности при переходе по подозрительным ссылкам.
Все вышеперечисленные атаки можно отнести к внешним факторам, предусматривать защиту важно еще на этапе проектирования сервиса.
Но существует и ряд внутренних факторов, о которых нужно позаботиться:
К ним относятся:
- обновление фреймворков, библиотек, сред выполнения продукта и т.д. Все, что используется в продукте — развивается, оптимизируется и заботится о безопасности использования.
- юридическая осведомленность, работа с NDA, взаимодействие с сотрудниками: проверка погруженности и понимания ответственности за продукт помогает избежать многих проблем.
- забота о комфортных условиях работы для команды, доверие к ней: до команды важно доносить цели компании и продукта, важность защиты данных.
- поддержка и погружение новых сотрудников в продукт и его ценность, структурированность, ограниченность доступов.
Последствия кибератак
По разным данным опубликованным в СМИ, финансовый ущерб от атак киберпреступников достигает в России 150 млрд рублей. В прошлом году по исследованиям «Лаборатории Касперского» в стране зафиксировано миллиарда атак. Учитывая, что информация сегодня — это валюта, хранимые данные представляют для злоумышленников большую ценность. Безопасность — это цепочка, в которой каждое звено определяет общую прочность. Комплексный подход к защите как фронтенда, так и бэкенда — единственный способ построить действительно надежное веб-приложение.