Як захистити сайт від атак на прикладі Хабрахабр

Останнім часом в мережі Інтернет можна знайти дуже багато посібників для «Початківців хакерів», в яких детально описуються всі основні методи злому сайтів. Думаєте, веб-розробники стали від цього розумнішими і зробили всі можливі методи для захисту? Я так не думаю.

У цій статті я хочу ще раз розповісти розробникам про те, як ламають сайти, а щоб вам не було нудно, я попутно буду ламати Хабр і докладно описувати, як я це робив. Ми розглянемо такі цікаві штучки, як «Активна XSS в профілі», «Нескінченна обнулення карми», «Публікація топіків із позначкою 'З пісочниці'», «CSRF через Flash і дірку в Internet Explorer 6» і багато іншого.

Всі уразливості вже виправлені. Ну або майже все.

Хотілося б тут, на самому початку, розповісти кілька дуже важливих на мій погляд речей.

По-перше, хто такі зломщики і що їм потрібно (давайте не будемо називати «зломщиків» словом «хакери», тому що це неправильно і хакери нікого не ламають). Не хочу нікого образити, але в більшості випадків це підлітки 15-17 років, головна мета яких не скільки отримати гроші, скільки просто зламати систему і отримати почуття нікого самозадоволення.

Часто розробник думає, що ламати його сайт нікому і в голову не прийде, оскільки там немає нічого цікавого. Але хакерам тільки що описаного типу це і не потрібно, тому вони легко знаходять вразливість і роблять дефейс (як правило, розміщення свого повідомлення замість головної сторінки, Чорний Володар вже робив так пару раз з Хабрахабр :-). Іноді ж вони навіть не можуть знайти і просту уразливість, тому використовують готові експлоїти (таких людей ще називають «Скрипт-кідді»). Таким чином, я вже можу дати вам кілька порад:

  • Не лінуйтеся фільтрувати вхідні дані [про це піде мова далі]. навіть якщо ваш сайт «нікому не потрібен».
  • Ставити найсвіжіші версії ПО іноді небезпечно, але і на старих сидіти не варто, тому що вас зможе зламати будь-яка людина, що вміє користуватися пошуком і завантажувати спеціальні програми «для злому сайтів».


Тепер давайте уявимо, що наш «персонаж» виріс і почав шукати роботу. Чим він буде швидше за все займатися? Правильно, зломом за гроші.

Такий тип вже не представляє особливої ​​небезпеки для сайтів, де справді немає нічого цікавого. Працює ж він тепер, в основному, «на замовлення», часто в невеликих групах.

Загалом, поради ті ж, тільки тепер вам варто трохи витратитися на людину, яка за гроші перевірить ваш сайт на наявність вразливостей і повідомить вам результати.

До речі, подібні «Експерти» - це, як правило, все той же зломщик, який пішов на пенсію і тепер заробляє на життя цілком мирним способом.

XSS або «Міжсайтовий скриптинг»

Ключова помилка веб-розробника в даному випадку - недостатня фільтрація отриманих від користувачів даних.

Подивимося, чим нас може «порадувати» Хабр. Британські вчені встановили, що 95% зломщиків називають себе


Йдемо в налаштування профілю і вводимо цю фразу в поле «Справжнє ім'я». Тепер тиснемо «Зберегти» і оновлюємо сторінку. Знаходимо мишку і пробуємо їй повозити біля чомусь порожнього поля - з'явилося віконце? Вітаю, ми знайшли уразливість!

Як захистити сайт від атак на прикладі Хабрахабр

Подібні уразливості часто вилазять, коли система не фільтрує або фільтрує частково приходить від користувача інформацію. Якщо ви пишете на PHP, то в ньому є дуже хороша функція htmlspecialchars. яка дозволяє вирішити проблему майже повністю.
Сенс такої, що не потрібно давати користувачеві можливість використовувати всі теги, потрібно також ретельно перевіряти, чи не вставив він щось в дозволений тег і не вийшов він за межі поля, як в прикладі вище.

Знайти приклад пасивної XSS на Хабре мені не вдалося, тому опишу її суть на словах.

Найчастіше місце, де їх можна знайти - це пошук. Спробуйте «пошукати» у себе на сайті щось на кшталт

Перевіряємо іншу прийняту інформацію


Фільтрувати потрібно не тільки HTML-теги і лапки, але також і іншу одержану від користувача інформацію.Особенно важливо стежити за логікою і ніколи не вірити користувачеві! За прикладом далеко ходити не треба - заповітна мрія будь-якого троля на Хабре, «Нескінченно обнуляє карма», була цілком можна реалізувати до сьогоднішнього дня :-)

Якщо ви вже обнуляли карму і хочете зробити це ще раз, то потрібно за допомогою «засобів розробника» вашому браузері просто зробити видимої приховану форму і натиснути «Обнулити»!

Для прикладу я створив «віртуальчіка», злив йому карму, обнулив, знову злив, знову обнулив і так далі ...

Як захистити сайт від атак на прикладі Хабрахабр

Як захистити сайт від атак на прикладі Хабрахабр

Наведу ще дуже цікавий приклад. Коли публікуємо нову статтю або редагуємо стару, то заміна поля «topic_type» на «sandbox» дозволяє отримати плашку «З пісочниці».

Як захистити сайт від атак на прикладі Хабрахабр

Навіщо це вам потрібно? Ну не знаю, припустимо, такі топіки частіше плюсують ...


Такі уразливості дуже часто зустрічаються у початківців веб-розробників. Знайти таку на Хабре я не зміг, але один хабропользователь стверджував мені в личку, що вона є. Я повторив його експеримент, але нічого не вийшло - напевно, закрили.

Для захисту потрібно фільтрувати лапки та інші спецсимволи, які можуть порушити логіку вашого запиту. Також, коли у вас є число, обов'язково явно приводите його до числа.


Якщо Бубмбурум починав своє підкорення Хабра з супер-флешки, то я за ніч потрапив в ТОП5 користувачів завдяки знайденої мною в минулому році CSRF-уразливості.

Зараз же я пишу це тому, що недавно знайшов ще одну таку ж і вона могла запрошувати на Хабре моїх віртуальчіков за допомогою користувачів, які користувалися Internet Explorer 6. Варто зауважити, що таких виявилося небагато.

Для захисту вам потрібно вставляти в кожну форму або важливий запит особливий csrf-токен, який не повинен знати зловмисник. Деякі фреймворки вставляють цей токен в ваші форми автоматично.

Схожі статті