javascript injection tutorial
Що таке ін'єкція Javascript?
Javascript - одна з найпопулярніших технологій і найбільш широко використовується для веб-сторінок та веб-додатків.
Він може бути використаний для реалізації різних функціональних можливостей веб-сайту. Однак ця технологія може спричинити деякі проблеми безпеки, про що розробник та тестувальник повинні бути свідомими.
Javascript можна використовувати не лише для корисних цілей, але і для деяких шкідливих атак. Одним із них є ін’єкція Javascript. Суть JS Injection полягає у введенні коду Javascript, який буде запускатися з боку клієнта.
У цьому підручнику ми дізнаємось більше про те, як перевірити, чи можливо введення Javascript, як можна виконувати JS Injection та які наслідки може принести JS Injection.
Що ви дізнаєтесь:
- Ризики введення JavaScript
- Чому важливо тестувати ін’єкцію JS?
- Порівняння з іншими атаками
- Перевірка ін’єкції JavaScript
- Модифікація параметрів
- Змінення дизайну веб-сайту
- Як протестувати проти ін’єкції JavaScript
- Можливий захист від цієї атаки
- Висновок
- Рекомендована література
Ризики введення JavaScript
JS Injection надає багато можливостей для зловмисного користувача змінювати дизайн веб-сайту, отримувати інформацію про веб-сайт, змінювати інформацію, що відображається, та маніпулювати параметрами (наприклад, файлами cookie). Тому це може призвести до серйозних збитків веб-сайту, витоку інформації та навіть зламу.
Основна мета JS Injection - змінити зовнішній вигляд веб-сайту та маніпулювати параметрами. Наслідки JS Injection можуть бути різними - від пошкодження дизайну веб-сайту до доступу до чужого облікового запису.
Чому важливо тестувати ін’єкцію JS?
Багато хто запитає, чи дійсно необхідне тестування на JS Injection.
Перевірка вразливостей JS Injection є частиною тестування безпеки. Тестування на безпеку зазвичай проводиться лише в тому випадку, якщо воно було включене до планування проекту, оскільки воно вимагає часу, великої уваги та перевірки кількох деталей.
Я помітив, що під час реалізації проекту досить часто пропускається тестування проти будь-яких можливих атак - включаючи JS Injection. Таким чином команди намагаються заощадити час проекту. Однак ця практика дуже часто закінчується скаргами клієнтів.
Слід знати, що тестування безпеки настійно рекомендується, навіть якщо воно не включене до планів проекту. Слід виконати перевірку основних можливих атак - одночасно потрібно перевірити наявність можливих вразливостей JS Injection.
Залишаючи простий Javascript Ін'єкційні вразливості у товарі може коштувати його якості та репутації компанії. Кожного разу, коли я навчився тестувати проти можливих атак та загального тестування безпеки, я ніколи не пропускаю цю частину тестування. Таким чином я просто впевненіший у якості товару.
Порівняння з іншими атаками
Слід зазначити, що ін'єкція JS не така ризикована, як Ін'єкція SQL , оскільки він виконується на стороні клієнта, і він не потрапляє в базу даних системи, як це відбувається під час атаки SQL Injection. Крім того, це не так ризиковано, як атака XSS.
Під час цієї атаки часом можна змінити лише зовнішній вигляд веб-сайту, тоді як основною метою атаки XSS є злом інших даних для входу.
Однак JS Injection також може спричинити серйозні збитки веб-сайту. Це може не тільки знищити зовнішній вигляд веб-сайту, але й стати хорошою основою для злому даних входу інших людей.
Перевірка ін’єкції JavaScript
Коли ви починаєте тестувати проти JS Injection, перше, що вам слід зробити, це перевірити, чи можливо JS Injection чи ні. Перевірити можливість введення цього типу дуже просто - при переході на веб-сайт вам потрібно ввести в адресному рядку браузера такий код:
javascript: alert (‘Виконано!’);
Якщо з’явиться спливаюче вікно із повідомленням «Виконано!», То веб-сайт вразливий до JS Injection.
Тоді в адресному рядку веб-сайту ви можете спробувати різні команди Javascript.
Слід зазначити, що JS Injection можливо не лише з адресного рядка веб-сайту. Існують різні елементи веб-сайту, які можуть бути вразливими до JS Injection. Найголовніше - це точно знати частини веб-сайту, на які може вплинути ін’єкція Javascript, і способи перевірки.
Типовими цілями JS Injection є:
- Різні форуми
- Поля коментарів до статті
- Гостьові книги
- Будь-які інші форми, куди можна вставити текст.
Щоб перевірити, чи можлива ця атака для форми збереження тексту, незважаючи на те, що вона надає звичайний текст, введіть код Javascript, як зазначено нижче, та збережіть текст у формі та оновіть сторінку.
javascript: alert (‘Виконано!’);
Якщо на нещодавно відкритій сторінці є текстове поле із повідомленням «Виконано!», То такий тип ін’єкційної атаки можливий для перевіреної форми.
Якщо двома способами з'являється текстове поле з повідомленням, ви можете спробувати зламати веб-сайт більш хитрими методами JS Injection. Тоді ви можете спробувати різні типи впорскування - модифікацію параметрів або модифікацію конструкції.
Звичайно, модифікація параметрів розглядається як більш ризикована, ніж модифікація конструкції. Тому під час тестування більше уваги слід приділяти модифікації параметрів.
Також слід пам’ятати, що частини вразливіших веб-сайтів для Javascript Injection - це поля введення, де зберігаються дані будь-якого типу.
Модифікація параметрів
Як згадувалося раніше, одним із можливих збитків від ін'єкції Javascript є модифікація параметрів.
Під час цієї ін'єкційної атаки зловмисний користувач може отримати інформацію про параметри або змінити будь-яке значення параметрів( Приклад ,налаштування файлів cookie). Це може спричинити досить серйозні ризики, оскільки зловмисний користувач може отримати конфіденційний вміст. Такий тип ін’єкції можна виконати за допомогою деяких команд Javascript.
Пам’ятаймо, що команда Javascript, яка повертає поточний файл cookie сеансу, пишеться відповідно:
javascript: сповіщення (document.cookie);
Введений у рядку URL-адреси браузера, він поверне спливаюче вікно із поточними файлами cookie сеансу.
Якщо веб-сайт використовує файли cookie, ми можемо прочитати таку інформацію, як ідентифікатор сеансу сервера або інші дані користувача, що зберігаються в файлах cookie.
Слід зазначити, що замість alert () можна використовувати будь-яку іншу функцію Javascript.
Наприклад ,якщо ми знайшли вразливий веб-сайт, який зберігає ідентифікатор сесії в параметрі cookie 'session_id'. Тоді ми можемо написати функцію, яка змінює поточний ідентифікатор сеансу:
javascript: void (document.cookie = “session_id =<>');
Таким чином значення ідентифікатора сеансу буде змінено. Також можливі будь-які інші способи зміни параметрів.
Наприклад, зловмисний користувач хоче увійти як інші люди. Щоб виконати вхід, зловмисний користувач спочатку змінить налаштування cookie авторизації на true. Якщо параметри файлів cookie не встановлені як «істинні», тоді значення cookie можна повернути як «невизначене».
ліве внутрішнє з'єднання проти ліве зовнішнє з'єднання
Щоб змінити ці значення файлів cookie, зловмисний користувач виконає дії відповідно до команди Javascript із рядка URL у браузері:
javascript: void (document.cookie = “авторизація = істина”);
В результаті поточний параметр cookie авторизація = false буде змінено на авторизація = істина. Таким чином зловмисний користувач зможе отримати доступ до конфіденційного вмісту.
Також слід зазначити, що іноді код Javascript повертає досить конфіденційну інформацію.
javascript: сповіщення (document.cookie);
Наприклад, якщо розробник веб-сайту був недостатньо обережним, він також може повернути імена та значення параметрів імені користувача та пароля. Тоді таку інформацію можна використовувати для злому веб-сайту або просто для зміни значення чутливого параметра.
Наприклад, за допомогою наведеного нижче коду ми можемо змінити значення імені користувача:
javascript: void (document.cookie = ”username = otherUser”);
Таким чином, будь-яке значення інших параметрів також може бути змінено.
Змінення дизайну веб-сайту
Javascript також може бути використаний для модифікації будь-якої форми веб-сайту та загалом дизайну веб-сайту.
Наприклад, за допомогою Javascript ви можете змінити будь-яку інформацію, що відображається на веб-сайті:
- Відображений текст.
- Фон веб-сайту.
- Вигляд форми веб-сайту.
- Вигляд спливаючого вікна.
- Вигляд будь-якого іншого елемента веб-сайту.
Наприклад, щоб змінити відображену електронну адресу на веб-сайті, слід використати відповідну команду Javascript:
javascript: void (document.forms (0) .email.value = ”Test@test.com”) ;
Також можливо кілька інших складних маніпуляцій з дизайном веб-сайту. За допомогою цієї атаки ми також можемо отримати доступ і змінити клас CSS веб-сайту.
Наприклад, якщо ми хочемо змінити фонове зображення веб-сайту за допомогою JS Injection, тоді команду слід запустити відповідно:
javascript: void (документ. фонове зображення: url (“other-image.jpg“);
Крім того, зловмисний користувач може написати код ін'єкції Javascript, який згадується нижче у формі вставки тексту, та зберегти його.
javascript: void (попередження („Привіт!“));
Потім кожного разу при відкритті сторінки з’являється текстове поле із повідомленням «Привіт!».
Змінений дизайн веб-сайту за допомогою ін’єкції Javascript є менш ризикованим, ніж зміна параметрів. Однак якщо дизайн веб-сайту буде змінено зловмисно, це може коштувати репутації компанії.
Як протестувати проти ін’єкції JavaScript
Його можна протестувати наступними способами:
- Вручну
- За допомогою інструментів тестування
- З плагінами браузера
Можливі уразливості Javascript можна перевірити вручну, якщо ви добре знаєте, як це слід виконувати. Крім того, його можна протестувати за допомогою різних засобів автоматизації.
Наприклад, якщо ви автоматизували свої тести на рівні API за допомогою інструменту SOAP UI, тоді також можна запускати тести інжекції Javascript за допомогою Інтерфейс SOAP .
Однак я можу лише зауважити на власному досвіді, що ви повинні були справді добре знати інструмент SOAP UI для тестування за допомогою JS Injection, оскільки всі кроки тестування повинні бути написані без помилок. Якщо будь-який крок тесту написаний неправильно, це також може спричинити неправильні результати тестування безпеки.
Крім того, ви можете знайти різні плагіни браузера для перевірки на можливу атаку. Однак рекомендується не забувати перевіряти цю атаку вручну, оскільки вона зазвичай дає більш точні результати.
Я хотів би сказати, що тестування вручну проти Javascript Injection робить мене більш впевненим і впевненим у безпеці веб-сайту. Таким чином ви можете бути впевнені, що жодна форма не була пропущена під час тестування, і всі результати ви бачите.
Щоб протестувати проти ін'єкції Javascript, ви повинні мати загальні знання про Javascript і знати, які частини веб-сайту є більш вразливими. Крім того, слід пам’ятати, що веб-сайт може бути захищений від JS Injection, і під час тестування потрібно спробувати зламати цей захист.
Таким чином ви будете впевнені, чи захист від цієї атаки досить сильний чи ні.
Можливий захист від цієї атаки
По-перше, щоб запобігти цій атаці, кожен отриманий вхід повинен перевірятися. Введення слід перевіряти щоразу, а не лише тоді, коли дані приймаються спочатку.
Настійно рекомендується не покладатися на перевірку на стороні клієнта. Крім того, рекомендується виконувати важливу логіку на стороні сервера.
Багато намагаються захистити від ін’єкції Javascript, змінюючи лапки на подвійні, і код Javascript не повинен виконуватися таким чином.
Наприклад, якщо ви пишете в поле коментарів щось із лапками ..., ці лапки будуть замінені на подвійні -<>...<>. Таким чином, введений код Javascript не буде виконаний.
Я помітив, що заміна лапок на подвійні лапки є досить поширеною практикою, щоб уникнути можливих атак JS Injection. Однак існує кілька способів кодування лапок, щоб зробити код ін'єкції JS виконаним. Тому зміна котирувань на подвійне - не ідеальний спосіб захисту від цієї атаки.
Висновок
Слід завжди мати на увазі, що ін’єкція Javascript є однією з можливих атак на веб-сайти, оскільки Javascript є однією з найбільш широко використовуваних технологій для веб-сайтів. Тому під час тестування веб-сайтів або будь-яких інших веб-технологій не слід забувати про тестування проти цієї атаки.
При проведенні тестування безпеки не слід забувати про JS Injection. Деякі люди вважають це тестування менш ризикованою атакою, оскільки воно проводиться на стороні клієнта.
Однак це неправильний підхід, і ми завжди повинні пам’ятати, що введення Javascript може спричинити серйозні збитки веб-сайту, такі як витік конфіденційної інформації, зміна параметрів або злом облікових записів користувачів.
Тому ми повинні розглядати це як важливу частину тестування і це частина інвестицій для отримання хорошого продукту та репутації компанії.
Тестування на ін’єкцію JS не дуже складно. По-перше, ви повинні мати загальні знання про Javascript і повинні знати, як перевірити, чи можлива ця атака для поточного веб-рішення чи ні.
Також під час тестування слід пам’ятати, що веб-сайт може мати захист від такого типу атак, але він може бути занадто слабким - його також слід перевірити. Ще одне важливе, що слід пам’ятати, це те, що існують різні типи атак Javascript Injection, і жоден з них не слід забувати тестувати.
Ви проводили тестування ін'єкцій Javascript ?? Ми будемо раді почути Вас, не соромтеся поділитися своїм досвідом у розділі коментарів нижче.
Рекомендована література
- Поглиблені підручники Eclipse для початківців
- Як налаштувати платформу тестування Node.js: Підручник з Node.js
- Підручник з ін’єкцій HTML: типи та попередження на прикладах
- Підручник з тестування ін’єкцій SQL (Приклад та запобігання атаці ін’єкцій SQL)
- Підручник з роздумів про Java з прикладами
- Підручник SVN: Управління вихідним кодом за допомогою Subversion
- Підручник з Python DateTime із прикладами
- Підручник з черепахи SVN: Редакції у сховищі коду