Уязвимости сайта – какие бывают и как их устранить
Вопрос безопасности важен для каждого сайта и ему нужно уделять внимание. Не стоит думать, что ваш небольшой блог или крохотный интернет-магазин не интересен для хакеров и его никто не будет взламывать. Вполне будут, если смогут – злоумышленников ведь интересует не контент, а хранящаяся в базе данных личная информация клиентов или ресурсы самого сайта. После взлома на него можно внедрить самый разный код, а это может не только ударить по репутации владельца, но и обернуться финансовыми потерями.
Давайте же посмотрим, какие бывают уязвимости у сайтов, которыми чаще всего пользуются хакеры. И, соответственно, вы сможете понять, в каком направлении можно будет организовать защиту, чтобы эти уязвимости прикрыть.
Уязвимость IDOR
Этой дырой в безопасности может воспользоваться любой желающий, если проявит достаточно смекалки. К тому же, она самая распространённая.
IDOR – аббревиатура от Insecure Direct Object Reference, что означает «небезопасные прямые ссылки». Простой пример – когда ссылка на профиль пользователя имеет личный идентификатор в конце такого вида site.ru/user/detail/edit?id=564563. Число присваивается каждому зарегистрированному пользователю.
Здесь несложно догадаться, что этот идентификатор можно поменять и если эта уязвимость имеется, то произойдёт переход в чужой профиль. При этом никак не проверяется подлинность самого пользователя.
Так злоумышленник простым перебором идентификатора может попадать в чужие профили на сайте и получать конфиденциальные данные, даже менять их или выполнять какие-то действия. Например, он сможет вывести деньги с баланса, или поменять у покупок адрес доставки.
Для защиты на сайте нужно предусмотреть проверку подлинности идентификатора и допускать на страницу только настоящего пользователя.
Уязвимость XSS
XSS – Cross-Site Scripting, означает «межсайтовый скриптинг». В сокращении используется буква X, чтобы не путать с CSS – каскадными таблицами стилей. Суть этой уязвимости в том, что на страницу сайта внедряется посторонний скрипт, написанный на языке JavaScript и когда пользователь заходит на эту страницу, он выполняется.
Здесь существует множество вариантов – скрипт может быть добавлен на страницу после взлома или подгружаться с другого сайта с помощью ссылки. Или он может расположиться в ссылке, вместо идентификатора, как в предыдущем примере. Его можно даже ввести в поле ввода в форме, и если не предусмотрена валидация в этих полях, то браузер его выполнит.
Возможностей у злоумышленника при этом открывается очень много – скрипт можно запрограммировать на что угодно. Он может перенаправить посетителя на фишинговую копию сайта, и он там введёт данные для авторизации или другие, не заметив подмены. Или скрипт может передать файл cookies авторизованного пользователя и тогда злоумышленник сможет зайти в чужой аккаунт.
Закрыть уязвимость XSS можно с помощью валидации введённых в поля данных, причём нужно это делать и в браузере. Различные способы её использования должны проверить программисты и заблокировать их все. Также можно запретить скриптам получать доступ к файлам cookies.
SQL-инъекции
Если сайт для хранения данных использует базу данных – а с ней работают практически все CMS, то возможно использование такого типа атаки, как SQL-инъекция. Это подмена запроса к базе данных, что приводит к выводу совсем не той информации, которая должна выводиться по плану.
Сделать такие запросы к базе данных злоумышленник может разными способами, но чаще всего для этого используются поля ввода в формах и ссылки с параметрами. С их помощью он может как внедрить свой код в страницы сайта, так и получить полный доступ к администрированию.
Защититься от этой уязвимости можно проверкой ссылок и данных в полях ввода. Их строгая фильтрация поможет заблокировать или обезвредить код, который злоумышленник может попытаться отправить на выполнение.
Доступ к папкам сайта
Иногда на сайтах встречается ещё одна уязвимость, которая позволяет злоумышленнику увидеть папки сайта с имеющимися в них файлами.
Для этого достаточно получить название к какому-нибудь файлу, который можно скачать с сайта – в его ссылке уже указана директория. Далее можно в ссылку просто подставлять символ «../», что позволит перемещаться на уровень вверх по вложенности папок и попасть в итоге в нужную, например, корневую, папку. А расположение основных файлов для всех сайтов или для определённой CMS общеизвестно, и злоумышленник сможет легко открывать их и читать в них данные.
Такая уязвимость может использоваться для запуска вредоносного кода, и даже изменения страниц или их подмены.
Защититься от этого можно, если запретить запись в директориях, не использовать данные файловой системы на сайте, фильтровать ссылки и запретить доступ к папкам.
Загрузка файлов
Когда на сайте есть возможность загружать файлы, это может открыть ещё одну опасную уязвимость, которая заключается в подмене. То есть, например, вместо аватарки злоумышленник может загрузить файл с вредоносным кодом и если известно, куда он сохраняется, то запустить его не составит труда.
Вы можете сделать проверку типа файла по расширению, но это никак не обезопасит, потому что расширение можно написать какое угодно. Вредоносный код может быть добавлен в реальное изображение и всё равно его можно запустить. В итоге злоумышленник может сделать всё, что пожелает и что запрограммирует в своём скрипте.
Защититься от этого можно, если запретить выполнение файлов в папке, куда они сохраняются. Можно присваивать им случайные имена, чтобы злоумышленник не смог обнаружить свой файл и запустить его. Также изображения можно подвергать дополнительной обработке на сервере – обрезать их и сохранять заново уже в правильном формате – тогда запустить внедрённый в них код уже не получится.
Как защитить свой сайт
Здесь мы перечислили далеко не все уязвимости, которые бывают – только самые распространённые. Продвинутые хакеры знают гораздо больше и имеют в своём арсенале специальные программы, которые могут протестировать сайт для поиска разных возможностей взлома.
Что касается защиты, то некоторые меры мы уже назвали. Нужно проверить свой сайт на наличие указанных уязвимостей и устранить их.
Добавим, что чаще всего взламывают сайты на популярных CMS с открытым кодом. Если вы используете одну из них, то старайтесь регулярно её обновлять – разработчики постоянно исправляют ошибки, в том числе и в плане безопасности. Это, конечно, не станет 100% гарантией от взлома, но сильно затруднит его, а сложности отпугнут большинство взломщиков.