- Популярные уязвимости сайтов: чем опасны и как их избежать
- IDOR: простая и очень опасная уязвимость
- К чему может привести
- Как защититься
- XSS: плохой сценарий
- К чему может привести
- Как защититься
- SQL-инъекции
- К чему может привести
- Как защититься
- Обход директорий
- К чему может привести
- Как защититься
- Уязвимости при загрузке файлов
- К чему может привести
- Как защититься
- Почему уязвимость – это огромное преимущество, которое предлагает нам жизнь
- Парадокс уязвимости
- Открываем себя навстречу уязвимости
- 1. Культивировать доверие с помощью любви.
- 2. То, как люди относятся к другим, является отражением того, как они относятся к себе.
- 3. Отпустите своё желание всё контролировать. Это ещё никому не удавалось.
- Новое видео:
Популярные уязвимости сайтов: чем опасны и как их избежать
Для любого, кто управляет веб-сайтом, на первом месте должен стоять вопрос безопасности. Критические угрозы и уязвимости могут сильно ударить как по репутации, так и по кошельку. Вместе со специалистами команды безопасности REG.RU Артёмом Мышенковым и Георгием Шутяевым рассказываем о популярных уязвимостях и способах их устранения.
В этом материале мы выделим пять популярных типов уязвимостей, с которыми может столкнуться любой веб-сайт, и поделимся способами, которые сами применяем для поиска «дыр» в безопасности, проверки сайта на уязвимости и защиты от атак.
IDOR: простая и очень опасная уязвимость
IDOR (Insecure Direct Object Reference, небезопасные прямые ссылки на объекты) — уязвимость, которая позволяет получить несанкционированный доступ к веб-страницам или файлам. Самый распространенный случай IDOR — когда злоумышленник перебирает предсказуемый идентификатор и получает доступ к чужим данным.
Лучше рассмотреть на примере. Допустим, вы зарегистрировались на сайте крупного интернет-магазина. Заполняя свои контактные данные, вы видите в строке браузера похожую ссылку:
onlinestore.ru/user/details/edit?id=39082330
Здесь главную роль играет ваш личный идентификатор (id=39082330). Эксперимента ради вы решили заменить последнюю цифру, и вдруг — попали на страницу с чужими контактными данными, которые можете редактировать.
Таким образом, просто перебирая id в URL, вы можете читать и изменять контактную информацию всех зарегистрированных пользователей. Проблема заключается в том, что при запросах к сайту он не проверяет принадлежность данных конкретному посетителю.
К чему может привести
— Разглашение конфиденциальной информации. Получив доступ к аккаунтам пользователей, злоумышленники увидят их личные данные.
— Обход аутентификации: можно получить доступ сразу к сотням или тысячам учётных записей с этой уязвимостью.
— Изменение данных: редактируя вашу контактную информацию, злоумышленник может использовать её в своих целях. Например, направить все ваши заказы в интернет-магазине к себе домой.
— Захват учётной записи. В некоторых случаях таким способом можно увести аккаунты пользователей, похитить деньги с их баланса и наделать много других неприятностей.
Как защититься
Всегда стоит помнить, что данные, поступающие в HTTP-запросе, являются недоверенными. Если ваш сайт должен отображать определённые страницы в зависимости от каких-то значений из входящих запросов, то такие запросы нужно обязательно валидировать. А именно:
— проверять, есть ли права на указанную страницу или действие;
— проверять принадлежность аккаунта или услуги авторизованному пользователю;
— использовать идентификаторы, которые невозможно предугадать или перебрать;
— использовать подпись идентификатора.
XSS: плохой сценарий
XSS — Cross Site Scripting (межсайтовое выполнение сценариев). Строго говоря, XSS — не уязвимость, а атака. Но условимся, что под XSS мы понимаем уязвимости, позволяющие проводить атаку XSS.
Когда происходит XSS-атака, в веб-страницу встраивается вредоносный код. И как только посетитель сайта откроет эту страницу, начнёт выполняться какой-либо неприятный сценарий. Чаще всего под вредоносным кодом подразумевается внедрение html-тегов или скриптов на JavaScript.
XSS бывают нескольких разновидностей:
1. Хранимые (stored). Код, который позволяет проводить атаку, постоянно находится на сервере и выполняется автоматически.
2. Отражённые (reflected). В этом случае вредоносного кода нет на самом сайте, но он содержится в заранее созданной злоумышленником веб-ссылке. Обрабатывая этот «плохой» кусок кода, сайт может ненамеренно запустить в браузере пользователя скрипт, который перехватит данные или выполнит другую «полезную нагрузку», если имеется ввиду сама нагрузка XSS.
3. DOM-based. Вариант отражённых, когда вредоносный код не отправляется на сервер, а выполняется сразу в браузере.
К чему может привести
— Перехват сессии пользователя (файлы cookies).
— Подмена страницы (например, формы ввода логина/пароля), чтобы похитить конфиденциальные данные.
— Внедрение скриптов на сайты с высокой посещаемостью (с целью рекламы, накрутки просмотров, DDoS-атак и прочего).
— Внедрение вредоносных программ на внешне безопасных сайтах.
Как защититься
— Выполняйте кодирование данных, вводимых пользователем, при выводе их на страницу.
— Если какие-то данные нельзя закодировать, защитите их дополнительной валидацией.
— Обеспечьте безопасную обработку данных, причём не только на стороне сервера, но и на стороне клиента.
SQL-инъекции
SQL-инъекция — это атака, направленная на сайт или веб-приложение, в ходе которой пользователь может обходным путём получить информацию из базы данных с помощью SQL-запросов. В случае успешной атаки пользовательские данные интерпретируются как часть SQL-кода запроса, и таким образом изменяется его логика. Как и прочие атаки, SQL-инъекция эксплуатирует уязвимости и недоработки в коде, и нужно проводить анализ сайта, чтобы найти «слабые» места.
Попробуем пояснить, что такое SQL-инъекция, на простом примере.
Как известно, большинство сайтов и веб-приложений состоят из трёх компонентов: бэкенд (код, который выполняется на сервере), фронтенд (код, который выполняется на стороне клиента, например в браузере) и база данных. Базы данных обычно состоят из множества таблиц. Скажем, если вы владеете интернет-магазином, у вас должно быть как минимум две таблицы: характеристики товаров и информация о зарегистрированных покупателях. Чтобы получать из базы информацию, например, о конкретном товаре, используется язык SQL-запросов.
Представим, что вы пришли в отдел бытовой техники (базу данных). У вас собой есть список покупок, где написано: «Один чайник за 1000 рублей». Вы даёте список продавцу, прося его принести то, что в нём указано (SQL-запрос).
В ответ на вашу просьбу продавец принесёт вам чайник — переходя к реальной жизни, отправив запрос, вы получите информацию из базы данных.
SQL-инъекция возникает, когда злоумышленник может изменить запрос к базе данных.
В примере выше SQL-инъекция бы возникла, если бы кто-то посторонний исправил ваш список покупок, например дописал в конец: «Чайник за 1000 рублей или смартфон за 30 000 рублей». Получив от вас такой запрос, продавец, видя, что смартфоны лежат гораздо ближе, чем чайники, дал бы вам смартфон — то есть то, что нужно злоумышленнику.
SQL-инъекция возможна при отсутствии фильтраций входящих параметров — хакеры могут менять их, чтобы получать нужные им данные. Уязвимыми местами в этом случае служат поля пользовательского ввода и URL-адреса, взаимодействующие с базой данных.
К чему может привести
— Утечка конфиденциальных данных (паролей, данных банковских карт и прочего).
— Внедрение вредоносного контента в уязвимые поля.
— Изменение базы данных.
— Доступ к операциям администрирования.
Как защититься
— При составлении запросов используйте плейсхолдеры (параметризированные запросы).
— Настройте белый список полей ввода.
— Отделите базу данных от логики веб-приложения.
— Используйте экранирование запросов.
Обход директорий
Обход директорий (Path traversal или Directory traversal) заключается в том, что хакер получает доступ к директориям или файлам на сервере с помощью манипуляций переменных, ссылающиеся на эти файлы. Например, для скачивания файла с сервера указывается его имя:
www.site.ru/download?file=file.pdf
С помощью символа, обозначающего директории (../), можно получить доступ к другим файлам, просто добавив его в строку:
www.site.ru/download?file=../../../etc/passwd
Если имя файла никак не валидируется, то злоумышленник сможет увидеть все файлы системы. И это очень опасно, так как важная информация (файлы конфигурации, логи и прочее) находится в заранее известных местах. Кроме того, можно читать исходный код приложения.
Уязвимость становится ещё опаснее, если помимо чтения файлов есть ещё и возможность загружать их в произвольные директории.
К чему может привести
— Несанкционированный доступ и изменение системных файлов, а также исходного кода сайта или веб-приложения.
— Удалённое выполнение вредоносного кода
— Подмена страниц сайта.
Как защититься
— Старайтесь не использовать вызовы файловой системы при пользовательском вводе.
— Если же без вызовов файловой системы не обойтись, проверяйте вводимые пользователем данные перед их обработкой. После проверки входных данных используйте API файловой системы платформы для канонизации пути. Следует убедиться, что канонизированный путь начинается с ожидаемого базового каталога.
Уязвимости при загрузке файлов
На многих сайтах пользователи могут подгружать разные файлы: например менять свою фотографию профиля или прикреплять изображения к комментариям. Если на вашем сайте доступна загрузка файлов пользователями, то нужно тщательно подойти к вопросу безопасности.
Самая распространённая ошибка — отсутствие проверки типа файла. Например, пользователь при загрузке фотографии может вместо .jpeg или .png подгрузить php-скрипт и выполнить его.
Тип файла обычно проверяется по заголовку, но такая проверка опасна, так как заголовок можно подменить. Проверки на стороне клиента тоже иногда можно обойти. И даже использование чёрного/белого списка расширений может быть неэффективным, поскольку иногда вредоносный код встраивается прямо в файл с «правильным» расширением.
К чему может привести
Злоумышленник подгрузит на сайт вредоносные скрипты, сможет «сломать» его или извлечь какие-либо данные.
Как защититься
Исчерпывающие рекомендации о том, как обезопасить загрузку файлов, есть на StackOverflow. Чек-лист посвящен PHP, однако некоторые пункты будут актуальны и для других языков:
1. запретить выполнение файлов в директории, куда они сохраняются;
2. переименовывать пользовательские файлы так, чтобы пользователь не мог повлиять на них;
3. заново сохранять картинки с помощью библиотек по редактированию изображений, чтобы удалить лишние meta-данные и возможный внедрённый в них вредоносный код.
Итак, мы рассмотрели несколько популярных уязвимостей и рассказали, как их избежать. Пишите в комментариях, хотите ли вы больше узнать о веб-безопасности и какие темы были бы наиболее интересны. Мы всегда готовы поделиться полезным опытом.
Также рекомендуем ознакомиться со статьями про безопасность сайта в нашей Базе знаний.
Источник
Почему уязвимость – это огромное преимущество, которое предлагает нам жизнь
Когда в последний раз вы почувствовали, что излишняя уязвимость – это проклятие всей жизни?
Уязвимость. Для большинства из нас это слово означает быть наивным, доверчивым, чуть ли не ребёнком при определённых обстоятельствах. Но это ещё не всё. Хуже всего, что при этом мы чувствуем себя чудовищно слабыми и беспомощными. На протяжении всей жизни нас учат, что самое лучшее быть не уязвимым, а наоборот – толстокожим и «пуленепробиваемым». Мол, только так можно выжить.
Быть неуязвимым, защищённым и невосприимчивым к бесконечным капризам жизни – вот идеал сегодняшнего общества «мотивированных и нацеленных». Такой себе эмоциональный и ментальный «идеал».
С этим, на первый взгляд, нельзя не согласиться. В конце концов, кому охота, чтобы нам сделали больно или нанесли неожиданный удар? Кто хочет признаться даже самому себе в уязвимости и нести ответственность за всё, что происходит в результате нашей «слабости»? Ответ – очевиден.
Очень немногие из нас готовы к этому и даже просто допускают саму возможность «приоткрыть забрало».
Правда же состоит в том, что все мы подвержены уязвимости, как бы не старались это спрятать или замаскировать. А проблема состоит в том, что люди зачастую неправильно или искажённо трактуют, что же такое уязвимость.
Парадокс уязвимости
«Парадокс уязвимости состоит в том, что это первое, что мы ищем в других, но самое последнее, что желали бы обнаружить у себя», – Брене Браун.
Уязвимость действительно является одной из самых загадочных граней опыта человека. Например, тот факт, что она невероятно притягивает нас в других, но сами мы шарахаемся от неё в себе, как от огня. Мы не хотим, не желаем быть уязвимыми. Но мы нуждаемся в ней!
Что уж обманывать себя: уязвимость делает нас более восприимчивыми к обидам. Нас намного легче ранить или разбить сердце. Мы разочаровываемся, страдаем… Этого нельзя отрицать!
Но в то же время толстокожесть вместо уязвимости лишает нас возможности по-настоящему чувствовать радость и волшебство жизни. Мы не можем быть естественными и открытыми, какими пришли в этот мир. И мы не можем быть …людьми.
Ведь быть человеком – означает быть несовершенным!
Я открыла для себя потрясающую вещь! Если позволить себе быть уязвимыми – перед нами сразу же открывают свои двери тысячи возможностей, о которых мы даже мечтать ранее не смели.
Например, если бы я не избавилась иллюзии того, что во всём следует быть идеальным, то ни за что не решилась бы писать статьи. «Ведь люди сразу же обнаружат все мои слабости и недостатки!» – полагала я. Также я никогда не смогла бы извлечь уроки из всего, что меня потрясло, бросило вызов или представило в довольно неприглядном свете.
И самое главное – я бы ни за что не открылась и не открыла для себя многих людей. То есть лишила б себя возможности открыть чудный мир возможностей и прекрасных собеседников и учителей.
Потому что быть уязвимым – это, прежде всего, быть храбрым. Смело смотреть в глаза своему страху и не отступать. Принимать то, что тебя могут в любую минуту атаковать, и придётся искать компромисс. Полностью отказаться или запретить себе уязвимость означает закрыть себя для настоящей жизни только из страха. А это неправильно. Вами должна управлять Сила.
Как писал Стивен Рассел: «Уязвимость – это единственно природное состояние каждого человека. Быть уязвимым означает быть, прежде всего, открытым. Да, как для боли, так и для радости и подлинного удовольствия. Быть открытым к тому, что жизнь может ранить тебя и не раз – также означает быть открытым к тому, что она приятно удивит и откроет свою красоту».
Открываем себя навстречу уязвимости
«Почему я, чёрт возьми, должен открываться и становиться уязвимым?» – это первая реакция каждого человека. Скорее всего, и ваша – также. Происходит это на уровне рефлексов, даже без предварительного анализа и раздумий. Зачем становится «слабым», тем более что этим обязательно воспользуются.
По правде говоря, по очень многим причинам. И сейчас объясню, почему:
Принятие своей уязвимости позволяет чувствовать себя более открытыми и близкими с другими людьми. Таким образом, улучшается ваша коммуникация, крепкими и здоровыми становятся отношения.
Без уязвимости невозможны счастливые и здоровые романтические и интимные отношения. Ведь если вы закрыты друг для друга, то о какой близости может идти речь?
Уязвимость позволяет нам быть более честными и естественными по отношению к другим людям, и по отношению к себе – также. А это – путь к гармонии: как с окружающим миром, так и с самим собой.
Уязвимость открывает перед нами множество дверей возможностей и открытий. Заметьте, что без неё они остались бы наглухо закрытыми навсегда. Ведь если вы закрыты, то и двери – закрыты. Всё логично.
Уязвимость помогает нам расти, проходя сквозь бури жизненных проблем и невзгод. Мы учимся на собственном опыте и становимся только сильнее.
Когда мы позволяем себе быть уязвимыми – это вносит в жизнь чувство общего благополучия. Ведь мы больше не прячемся и не закрываемся, а наоборот – открываемся навстречу всему, что предлагает нам жизнь.
Признаюсь честно, я также побаиваюсь уязвимости. Как по мне, это просто ужасный опыт, как если бы ты ходил по улицам голым с надписью на лбу: «Ударь меня». Так что вы не одиноки в своём страхе уязвимости.
Это нормально, ведь все мы – всего лишь люди, а не боги. Как и я, вы, вероятно, всё ещё учитесь этой непростой науке – принятию уязвимости. Но когда нам с вами удастся постигнуть её – это будет величайшей победой над собой и своими страхами. Поистине мужественный поступок.
Что же изменится в вашей жизни после этого? Да буквально всё! И самое главное – в лучшую сторону.
Как же решиться быть уязвимым? Сделать всё правильно и грамотно?
1. Культивировать доверие с помощью любви.
Почему люди предпочитают закрываться и пребывать в изоляции? Одной из самых главных причин является то, что они страдают от неуверенности в себе. А также – не научены любить себя. Боятся любить и уважать себя.
А когда мы себя не уважаем, малейшая критика, осуждение или резкие слова других людей становятся для нас сокрушительным ударом. Который, к сожалению, не проходит бесследно: мы становимся ещё более неуверенными в себе и ещё более закрываемся.
Не удивительно, что все так боятся уязвимости! Ведь мы полагаем, что именно она превращает нас в мишень для ударов и обид.
Чем больше вы будете культивировать любовь к себе, чем больше будете уважать и признавать себя – тем менее опасной и грозной станет уязвимость. Наоборот, она станет вашей частью, внесёт спокойствие и счастье в вашу жизнь.
2. То, как люди относятся к другим, является отражением того, как они относятся к себе.
Довольно часто нашу уязвимость просто не понимают и не воспринимают. Недалёкие люди многозначительно улыбаются или даже высмеивают. Это – не о вас. Это – о них.
Правда состоит в том, что, то, как люди относятся к другим, является отражением того, как они относятся к себе.
Добродушные и открытые люди редко относятся к кому-то плохо. Они любят этот мир, себя и других людей. Места для агрессии просто не остаётся.
А вот капризные и депрессивные люди – редко относятся к другим доброжелательно. Ведь если они не любят и не уважают себя, то как могут относиться к другим?
Достаточно осознать эту истину – и вы совершенно по-другому начнёте воспринимать жизнь. И уязвимость – также.
3. Отпустите своё желание всё контролировать. Это ещё никому не удавалось.
Признаюсь честно, я просто помешана на контроле. А как с этим обстоят дела у вас? Подозреваю, что очень похоже.
Дело в том, что для того, чтобы принять уязвимость, следует раз и навсегда избавиться от этой пагубной привычки – желания контролировать, как вы выглядите в глазах других людей.
Добиться этого не так уж и просто, не буду скрывать. Ведь вы «практиковались» годами! Но нет ничего не возможного. Выработать в себе новую привычку при желании – можно. Тем более, что это является жизненно важным навыком.
Уязвимость – это огромное преимущество, которое предлагает нам жизнь. И не смотрите на то, что в нынешнем обществе господствуют совершенно другие идеалы «толстокожести и пуленепробиваемости». Как будто уязвимость представляет собой угрозу нашему благополучию и силе. На самом деле всё наоборот: уязвимость позволяет нам любить глубже, сильнее, смелее. А значит – становиться только сильнее.
Новое видео:
Источник