vyvchy
    Теми розділу

    11 · Security для QA

    Вразливості бізнес-логіки

    Зміст

    Більшість попередніх глав розділу — про те, як застосунок робить те, чого йому не казали: підмішує команду в дані, XSS проносить скрипт у вивід, CSRF надсилає чужий запит руками браузера. Тут навпаки: код виконує рівно те, що в ньому написано, а помилка сидить у самій інструкції — задуманий процес не збігається з тим, що потрібно бізнесу. Тому в темі немає пейлоада, який можна вставити в поле, і немає сигнатури, за якою це знайшов би сканер.

    Для QA це найближчий до звичайного тестування клас — і саме тому найнеприємніший: він вимагає знати правила процесу, а не список . Глава — канонічний виклад теми на сайті.

    Що таке вразливість бізнес-логіки

    (business logic vulnerability) — це дефект у тому, як застосунок реалізує задуманий процес: код робить те, що йому сказали, — просто сказане не збігається з потребою бізнесу. Ціну класу називає одразу: такі дефекти зазвичай одні з найважчих для виявлення, зазвичай специфічні для конкретного застосунку — і водночас одні з найруйнівніших, якщо їх проексплуатувати.

    Чому мовчить автоматика: у цих багів немає сигнатури, за якою зіставляти; інструментам важко зрозуміти контекст; вони перевіряють, що процес працює у валідних ситуаціях, і логічних вразливостей виявляти нездатні. Найточніше — перелік того, що лишається людині: інструмент не має способу визначити, чи здатен користувач обійти потік процесу редагуванням параметрів, вгадуванням імен ресурсів або , і не має механізму навіть запідозрити такий стан справ.

    У карті клас живе в A06:2025 Insecure Design () — «відсутній або неефективний дизайн контролю». Дефекти бізнес-логіки названі там прямо, зокрема брак опису небажаних і неочікуваних змін стану. Межу між дизайном і реалізацією OWASP проводить навмисно: різні першопричини, різний момент виникнення, різне лікування — бездоганна реалізація не виправляє небезпечного дизайну, бо потрібного контролю там ніколи не проєктували. Тож знахідку не закривають фіксом у коді: вона повертає команду до дизайну.

    Порожній результат спроби теж нічого не доводить: успіх атаки залежить від глибини вразливості, сили самої атаки й дієвості контрзаходів, і не кожна атака вдається (до речі, в ISTQB attack означає тестовий підхід, а дію зловмисника — окремий запис security attack). А ореол екзотики знімає сам WSTG: тестування логічних дефектів подібне до типів тестування, які застосовують функціональні тестувальники — тих, що зосереджені на логіці або на скінченних станах. Тож і вхідна точка не пейлоадна: випишіть правила бізнес-функції, а тоді перевірте, чи застосунок їх примушує виконувати.

    Обхід workflow: правильні кроки в неправильному порядку

    (circumvention of work flows) — за означенням WSTG це будь-яка , що дозволяє зловживати застосунком у спосіб, який дає обійти задуману послідовність кроків бізнес-процесу (конфігурований процес CI — «воркфлоу» GitHub Actions — це інша тема, тож оригінал тут лишається латиницею).

    Вимога подвійна, і другу її половину забувають частіше: користувач має пройти кроки в правильному порядку, а якщо процес обірвано без коректного завершення — всі дії й породжені ними дії відкочуються або скасовуються. Застосунок мусить знати сам себе (self-aware) і не давати обходити, пропускати чи повторювати кроки.

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

    Крок 1
    кошик

    Крок 2
    доставка

    Крок 3
    оплата

    Крок 4
    підтвердження

    Пропустити крок

    Повторити крок

    Переставити кроки

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

    Крок 1
    кошик

    Крок 2
    доставка

    Крок 3
    оплата

    Крок 4
    підтвердження

    Пропустити крок

    Повторити крок

    Переставити кроки

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

    Формулювання очікування тут не наше: перевіряють спроби пропустити, повторити й переставити кроки, і результатом кожної має бути , а не просування. Готового чеклиста під конкретний продукт не буде: такі вразливості дуже специфічні для системи, а ретельні ручні misuse cases розробляються з вимог і use case-ів.

    test('оплата без пройденого кроку доставки відхиляється', async ({ request }) => {
      const order = await createOrder(request);              // крок 1 пройдено
      const res = await request.post('/api/checkout/pay', {
        data: { orderId: order.id, method: 'card' },         // крок 2 пропущено
      });
      expect(res.ok()).toBeFalsy();                          // відмова, а не просування
      expect(await paymentsFor(order.id)).toHaveLength(0);   // і жодного побічного ефекту
    });

    На боці API це підступніше, і причину названо прямо: кожен автентифікується й авторизується окремо, тож традиційні перевірки доступу таких проблем часто не виявляють — під це шпаргалка OWASP REST Security тримає окремий перелік «Preventing Out-of-Order API Execution» (чи можна викликати ендпоінти поза послідовністю, чи кожен валідує поточний стан процесу, чи придатні токени до між кроками).

    Обрив на півдорозі потрапляє в нову категорію редакції 2025 — A10 Mishandling of Exceptional Conditions (), що зібрала 24 про неправильну обробку помилок, логічні помилки й «падіння у відкритий стан». Її рецепт збігається з вимогою WSTG: обірвану на середині транзакцію відкочують по кожній частині й починають наново — це і є failing closed. Розкриття даних через помилку — інша частина тієї самої категорії, її дім — глава «Security misconfiguration і розкриття даних».

    Підтвердження транзакції: другий фактор на операцію, а не на вхід

    (transaction authorization) — це подання другого фактора саме на чутливу операцію (скажімо, на переказ), щоб система перевірила право користувача її виконати. Це не вхід у систему, і змішування цих двох речей дає найдешевшу атаку: якщо вхід і підтвердження виглядають однаково, шкідливе ПЗ використає перші облікові дані для автентифікації, а другі — для авторизації шахрайської операції.

    Принцип, на якому все тримається, — WYSIWYS (What You See Is What You Sign): метод підтвердження мусить дозволяти користувачеві розпізнати й підтвердити саме ті дані, які значущі для цієї операції. Порожнє «введіть код із SMS» без опису операції — дефект, а не косметика: брак змістовної підказки легко зловживається соціальною інженерією й шкідливим ПЗ. Решта вимог прямо перетворюється на тести:

    • Одне підтвердження на сесію дорівнює підтвердженню чого завгодно: якщо авторизаційні дані питають раз, ними можна авторизувати будь-яку операцію протягом сесії. Звідси — кожен набір авторизаційних даних унікальний для кожної операції.
    • Контроль — на сервері: результат авторизації не має змінюватися від правки даних дорогою від клієнта до сервера.
    • Кроки не переставляються й не пропускаються, а зміна даних має анулювати підтвердження — знецінити раніше введені авторизаційні дані (наприклад, згенерований OTP) і сам ; перед виконанням стоїть фінальний контроль, що перевіряє факт авторизації.
    • Перебір коду ламає процес, а не лічильник: після певної кількості невдалих спроб весь процес підтвердження починається наново. Конкретного числа джерело не дає — це рішення продукту.

    І окремо сценарій, який шпаргалка називає дослівно: у запит, що авторизує операцію, додають нові параметри даних — і погано реалізований процес авторизує початкову операцію, а виконає шахрайську.

    TOCTOU: вікно між перевіркою і використанням

    TOCTOU (Time-of-check Time-of-use) — продукт перевіряє стан ресурсу перед використанням, але стан устигає змінитися так, що результат перевірки стає недійсним (CWE-367). Точність тут не педантизм: TOCTOU не синонім гонки — у каталозі MITRE він стоїть нащадком CWE-362 «Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')», тобто гонка ширший клас, а TOCTOU — її впізнаваний вид із формою «перевірив → використав» (поширене написання TOCCTOU MITRE називає найімовірнішою одруківкою від TOCTTOU — у трекері шукайте всі варіанти).

    Гонка як браузерний механізм і часта причина — тема розділу про веб: «Виконання JavaScript та event loop». Тут та сама механіка як безпекова слабкість: такою вона стає, коли може вплинути на стан ресурсу між перевіркою і використанням — на спільний файл, памʼять, навіть змінну в багатопотоковій програмі. Демонстраційний приклад MITRE — підміна файлу симлінком після виклику access(), після якої привілейована програма працює з чужим файлом; у переліку спостережених прикладів там же стоїть -2015-1743, де файл підмінили після перевірки, але до виконання. Наслідком буває і доступ до чужого на читання й запис, і те, що такий запис може не потрапити в логи.

    У вебзастосунку ознака вразливого місця формулюється одним рядком: будь-яка операція, що читає значення, ухвалює за ним рішення й записує значення, є потенційною гонкою. Класика — ендпоінт перевіряє баланс і списує кошти без блокування: два одночасні запити обидва проходять перевірку й обидва списують.

    СерверЗапит BЗапит AСерверЗапит BЗапит AПеревірити баланс100 достатньоПеревірити баланс100 достатньоСписати 100Списати 100ГотовоГотовоСерверЗапит BЗапит AСерверЗапит BЗапит AПеревірити баланс100 достатньоПеревірити баланс100 достатньоСписати 100Списати 100ГотовоГотово

    Наслідки названі поіменно: бали лояльності висмоктуються, баланси йдуть у мінус, одноразові купони гасяться багато разів, а бонуси «один на акаунт» стають «багато на акаунт». Аргумент «вікно надто вузьке» джерело знімає прямо: інструменти тривіально надсилають десятки запитів у межах однієї мілісекунди — якщо вікно існує взагалі, вважайте його експлуатованим.

    Заходів CWE називає чотири: не робити перевірку перед використанням узагалі (першопричини це не усуває, зате прибирає хибне відчуття безпеки), блокувати до перевірки, а не після, перевіряти ресурс ще раз після використання і — якщо атомарність недосяжна — скорочувати проміжок між перевіркою й дією, розуміючи, що проблему це не виправляє. У вебі все зводиться до атомарності й до застереження, яке знімає найпоширенішу відмовку: на дефолтному більшості баз перевірка й оновлення виконуються окремо, і між ними прослизає інша транзакція.

    Позиція за замовчуванням для тестування — вважати одночасність реальною : якщо два запити можуть змагатися, вони змагатимуться, тож напишіть тест, який їх зіштовхує. І межа вголос: () знаходить лише деякі випадки цієї слабкості, тож його мовчання доказом не є.

    test('одноразовий ваучер гаситься рівно один раз', async ({ request }) => {
      const redeem = () => request.post('/api/cart/voucher', {
        data: { cartId, code: 'WELCOME-1' },
      });
    
      const responses = await Promise.all([redeem(), redeem(), redeem()]);
      const accepted = responses.filter((r) => r.ok());
    
      expect(accepted).toHaveLength(1);
    });

    Single-packet attack: коли вирішують мілісекунди

    Promise.all шле запити з одного процесу, але доїжджають вони по-різному: мережевий джитер (network jitter) розтягує прибуття, і саме через нього вразливості з вузьким вікном історично було надзвичайно важко знаходити.

    — прийом, який це прибирає: він змушує 20-30 запитів прибути на сервер одночасно, незалежно від мережевого джитера. Увів його James Kettle (PortSwigger Research) на Black Hat USA 2023. Механіка тримається на HTTP/2, бо той дозволяє надсилати запити конкурентно одним зʼєднанням, тоді як у HTTP/1.1 вони мусять іти послідовно: від кожного запиту притримують крихітний фрагмент (заголовки без прапорця END_STREAM, а порожній DATA-фрейм із ним — наостанок) і «дозавершують» усі 20-30 одним TCP-пакетом, для чого TCP_NODELAY має бути вимкнений — фінальні фрейми збирає докупи саме алгоритм Нейгла. Із HTTP/1 прийом несумісний, тож підтримка HTTP/2 на цілі перевіряється першою.

    Виграш автор виміряв на пачці з 20 запитів, надісланій за 17 000 км із Мельбурна в Дублін: медіанний розкид last-byte sync — 4 мс проти 1 мс у single-packet attack, тобто в 4-10 разів дієвіше; на реальній вразливості — близько 30 секунд проти понад двох годин. Живе прийом у розширенні Turbo Intruder, а з Burp Suite 2023.9 — і в самому Repeater із групами паралельних запитів.

    І дві пастки інтерпретації. Пачка обробилася послідовно — це ще не «застосунок серіалізує запити»: PHP за замовчуванням блокує за ідентифікатором сесії, тож кожен запит має йти зі своєю сесією. Нерівний тайминг — це ще не поведінка застосунку: стабільно різний навіть за single-packet означає на боці бекенду, а не блокування в логіці.

    Маніпуляція ціною, кількістю й купонами

    Найупізнаваніший підклас — (price manipulation): сервер перераховує підсумок із ціни, надісланої клієнтом, замість того щоб узяти власну з бази, і користувач платить один цент за телевізор. У WSTG той самий сюжет — користувач бачить сторінку підсумку, а тоді повертається на неї в тій самій валідній сесії, підставляє нижчу ціну й завершує покупку.

    Правило, яке знімає весь клас, коротке: ніколи не приймати від клієнта ціну, проміжний підсумок, податок чи загальну суму. Від клієнта — тільки ідентифікатори товарів і кількість, решту сервер рахує сам; зі знижками так само — приймається код купона, а валідація й застосування на сервері. Готовий набір кейсів теж із джерела:

    • відʼємна кількість у кошику, щоб отримати «повернення» проти вартості іншого товару;
    • купон, застосований повторно або до товарів, для яких він не призначався;
    • стекінг промо: кілька акцій, кожна з яких мала працювати окремо, разом опускають ціну нижче собівартості;
    • одноразовий ваучер, погашений двома паралельними запитами — перетин із TOCTOU.

    Окремого іменованого тесту під маніпуляцію ціною у WSTG v4.2 немає: приклад із цінами живе у вступі до розділу бізнес-логіки, а перевірку даних тримає WSTG-BUSL-01 «Test Business Logic Data Validation». Його вимога ширша за форму: логічно валідні дані мають прийматися і на фронтенді, і безпосередньо на сервері, бо перевірка лише локально лишає застосунок уразливим через та на стиках з іншими системами; дані не стають довіреними від того, що вже потрапили в систему. Від аналізу граничних значень джерело цей тест відмежовує: тут складніше, і здебільшого перевірити в точці вводу не вийде — доводиться звірятися з іншою системою.

    Як шукають руками: перехоплювальним проксі дивляться POST/GET, вишукуючи змінні на кшталт вартості й кількості, а тоді обстрілюють поле логічно «невалідними» даними — ідентифікаторами, яких не існує, або значеннями, що не вкладаються в бізнес-логіку. Ціль сформульована як твердження про бекенд: усі перевірки відбуваються на сервері й їх не можна обійти.

    Патерни зловживання: перелік, проти якого проєктують

    Шпаргалка OWASP тримає окремий розділ «Abuse Patterns to Design Against» — тобто (abuse pattern) є предметом проєктування, а не лише реагування після інциденту. До вже перелічених купонних патернів WSTG додає накрутку балів циклом «почати транзакцію → скасувати» і контроль, що стоїть лише на створенні. Разом це стартовий набір кейсів для будь-якого процесу з грошима, балами чи лімітами: кожен ліміт «один на акаунт» перевіряється двічі — послідовно й одночасно, кожен контроль зі створення перевіряється на редагуванні, кожне скасування — на відкат усього, що процес устиг нарахувати.

    Межу автоматизації джерело проводить точно: автоматизація бізнес-логіки неможлива — це лишається ручним мистецтвом, що спирається на знання повного бізнес-процесу та його правил. Але сказано це про сценарій, а не про перевірку: щойно сценарій відібрано, перевірка автоматизується, і чинна шпаргалка називає три її форми — тест на інваріант (на кожен інваріант із пишеться тест, який упаде, якщо інваріант порушено), тест на одночасність і тест на порядок кроків з відмовою як очікуваним результатом.

    Анти-автоматизація: один контроль не тримає

    Зловживання логікою рідко лишається поодиноким — його масштабують автоматизацією, і патерни такого трафіку каталогізовані окремим проєктом OWASP, Automated Threats to Web Applications (OAT-001OAT-021). Ціль контролю — не «заблокувати всіх ботів» (пошукові й моніторинг легітимні), а підняти вартість зловживання автоматизацією. Звідси шаруватість: один контроль крихкий, а запит, який виглядає людським на одному шарі (нормальний IP, розвʼязана ), може провалитися на іншому — десять оформлень замовлення за тридцять секунд різними картками.

    CAPTCHA тут не запобіжник: канон називає її контролем (defense in depth), який робить перебір довшим і дорожчим, і окремо каже, що вона не заміняє блокування. Ще одна межа: головоломки на вводі корисні проти зловживання функціональністю, але від DoS-атак не захищають. Повний розбір контролів — глава «Автентифікація: атаки й тестування».

    Для AQA тут є прикладний бік: (приховане поле форми, яке заповнюють лише боти, після чого запит відхиляють) з боку автотесту виглядає як баг застосунку, а (виявленому боту не віддають 403, а прогресивно сповільнюють відповіді) виглядає як . Обидва є свідомою поведінкою захисту, і поводження автотестів із ними узгоджують наперед.

    Abuse cases: сценарій зловживання, що став вимогою

    Звідки беруться сценарії? З вимог. Abuse case — це use case, у якому зі злим наміром шкодять системі або іншим акторам (означення ISTQB); друге означення дивиться з боку функції — це спосіб використання функції, не передбачений розробником.

    Одразу про статус: шпаргалка OWASP під цю техніку архівна, і причина названа в ній самій — рецензенти зауважили, що abuse cases рідко застосовують на практиці, каркас видається важким, а опублікованих прикладів мало. Тож тут abuse case — описана техніка, а не чинна рекомендація. Жива вона під іншою назвою: WSTG вживає misuse case у тому самому сенсі й ставить його методом, а не опцією — «розробіть misuse case і спробуйте обійти кожен виявлений логічний потік». Що шпаргалка вимагає від техніки, якщо її застосовують:

    • відібрані abuse cases мусять стати вимогами безпеки — секцією специфікації або user story; інакше їх не оцінять за вартістю й не реалізують, а унікальний ідентифікатор кожного потрібен, щоб трасувати його впродовж проєкту;
    • моделі abuse case — паливо для конкретних тестів безпеки, а автотести під них ще й відстежують дієвість контрзаходів і те, що контрзахід лишився на місці після виправлень;
    • QA названий у переліку учасників поіменно — аналітик якості або функціональний тестувальник як людина, що розуміє, як функція має працювати, як не має і що змушує її ламатися.

    І окремо клас, який шпаргалка називає abuse of functionality, він же «business logic attack»: він залежить від дизайну й реалізації функцій, а приклад класичний — використання потоку для перебору акаунтів.

    Типові помилки

    • Виглядає як «скан зелений — чисто», а насправді у цих багів немає сигнатури, а контексту сканер не розуміє.
    • Виглядає як «користувач так не зробить», а насправді непередбачений спосіб використання функції і є означенням класу.
    • Виглядає як «у нас же транзакція в базі», а насправді на дефолтному рівні ізоляції перевірка й оновлення ідуть окремо, і між ними прослизає інша транзакція.
    • Виглядає як «вікно в мілісекунди — теорія», а насправді виміряний розкид single-packet attack — 1 мс.
    • Виглядає як «ціна ж перевіряється у формі», а насправді локальна перевірка лишає застосунок уразливим через проксі й на стиках із суміжними системами.
    • Виглядає як «модерація стоїть, слово не пройде», а насправді контроль спрацював на створенні, а на редагуванні допис уже ніхто не звіряє.
    • Виглядає як «код підтвердження прийшов — операція та сама», а насправді дані могли змінитися після авторизації; джерело називає це TOCTOU.
    • Виглядає як «тест то падає, то ні — флак», а насправді це може бути тарпітинг або honeypot-поле.

    Підсумок

    • Логічна вразливість — це дефект задуманого процесу, а не вводу. Сигнатури немає, тож знаходить її людина, яка знає правила процесу, а не інструмент.
    • Багатокроковий процес перевіряється трьома спробами: пропустити, повторити, переставити кроки; очікуваний результат кожної — відмова, а обірваний процес відкочує все, що встиг нарахувати.
    • TOCTOU — не синонім гонки, а її вид (CWE-367 нащадок CWE-362). Ознака вразливого місця: операція читає значення, ухвалює рішення й записує значення. Рятує атомарність, а не швидкість.
    • Від клієнта приходить «що» і «скільки», а «почім» рахує сервер — ціна, підсумок, податок і знижка з клієнта не приймаються ніколи.
    • Сценарій зловживання пишеться руками з вимог, а перевірка автоматизується — у трьох формах: інваріант, одночасність, порядок кроків.

    Можливі питання

    • Чому сканер не знаходить логічних вразливостей? Чекають механізм, а не оцінку: немає сигнатури, немає контексту, інструменти перевіряють валідні ситуації. Сильна відповідь додає, що лишається людині — обхід процесу, редагування параметрів, ескалація привілеїв.
    • Чим TOCTOU відрізняється від гонки? Перевіряють точність: гонка — ширший клас (CWE-362), TOCTOU — її вид (CWE-367) із формою «перевірив → використав».
    • Як перевірити ліміт «один купон на акаунт»? Очікують два тести: послідовний і паралельний — і пояснення, чому послідовного мало.
    • Як тестувати багатокроковий процес оформлення замовлення? Дивляться, чи назве кандидат три спроби (пропуск, повтор, перестановка), відкат при обриві й повторну перевірку на редагуванні.
    • Розробник каже, що вікно між перевіркою і записом — мілісекунди й це нереально. Ваша відповідь? Перевіряють, чи є аргумент, а не думка: десятки запитів у межах мілісекунди, виміряна 1 мс проти 4 мс у last-byte sync.
    • Що таке abuse case і що з ним робити далі? Означення — use case зі злим наміром; відрізняє сильну відповідь продовження: сценарій має стати вимогою або критерієм приймання, інакше він нічого не змінює.

    Джерела

    Що таке вразливість бізнес-логіки

    • OWASP Cheat Sheet — Business Logic Security — означення класу через задуманий процес і теза «сигнатури, за якою зіставляти, немає».
    • OWASP WSTG — 4.10.0 Introduction to Business Logic — складність виявлення й руйнівність, причини мовчання інструментів, спорідненість із функціональним тестуванням, правила бізнес-функції як точка входу.
    • OWASP Top 10:2025 — A06 Insecure Design — категорія «відсутній або неефективний дизайн контролю», дефекти бізнес-логіки в ній, межа дизайну й реалізації.
    • RFC 4949 — Internet Security Glossary, Version 2 — не кожна атака вдається; успіх залежить від глибини вразливості, сили атаки й контрзаходів.
    • ISTQB Glossary — колізія attack (тестовий підхід) і security attack (дія зловмисника).

    Обхід workflow: правильні кроки в неправильному порядку

    Підтвердження транзакції: другий фактор на операцію, а не на вхід

    • OWASP Cheat Sheet — Transaction Authorization — означення, WYSIWYS, розрізнення входу й підтвердження операції, унікальність даних на операцію, серверний контроль, послідовність кроків, анулювання при зміні даних, фінальна брама, рестарт після невдалих спроб і TOCTOU у підтвердженні.

    TOCTOU: вікно між перевіркою і використанням

    • CWE-367 — Time-of-check Time-of-use (TOCTOU) Race Condition — означення, три написання акроніма, батьківський CWE-362, умова безпекової значущості, демонстраційний приклад із access(), спостережений приклад CVE-2015-1743, наслідки, чотири заходи, межі SAST.
    • OWASP Cheat Sheet — Business Logic Security — ознака «читає, вирішує, записує», перевірка балансу без блокування, наслідки в балах і купонах, зняття аргументу про вузьке вікно, атомарність і дефолтний , форма тесту на одночасність.

    Single-packet attack: коли вирішують мілісекунди

    Маніпуляція ціною, кількістю й купонами

    • OWASP Cheat Sheet — Business Logic Security — перерахунок підсумку з клієнтської ціни, правило «тільки ідентифікатори й кількість», серверна валідація купона, перелік патернів із відʼємною кількістю й стекінгом промо.
    • OWASP WSTG — 4.10.0 Introduction to Business Logic — сценарій повернення на сторінку підсумку в тій самій сесії.
    • OWASP WSTG — 4.10.1 Test Business Logic Data Validation — вимога логічної валідності на обох боках, межа з аналізом граничних значень, недовіра до даних усередині системи, метод із перехоплювальним проксі й ціль «усе перевіряється на бекенді».

    Патерни зловживання: перелік, проти якого проєктують

    Анти-автоматизація: один контроль не тримає

    Abuse cases: сценарій зловживання, що став вимогою

    • ISTQB Glossary — означення abuse case через акторів зі злим наміром.
    • OWASP Cheat Sheet — Abuse Case — архівний статус і його причина, означення через непередбачений спосіб використання функції, вимога перетворити сценарій на вимогу чи критерій приймання, унікальний ідентифікатор, роль автотестів і QA, abuse of functionality.
    • OWASP WSTG — 4.10.6 Testing for the Circumvention of Work Flows — misuse case як метод: розробити сценарій і спробувати обійти кожен логічний потік.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.