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

    11 · Security для QA

    Авторизація та контроль доступу

    Зміст

    Кнопки «Видалити проєкт» у читача в інтерфейсі немає — і на цьому перевірку прав закривають. Але інтерфейс це лише малюнок поверх запитів: той самий DELETE /api/projects/1 летить і повз браузер, тож питання рівно одне — чи стоїть перевірка там, куди він приходить. Найдорожчі знахідки цієї теми виглядають не як помилка, а як успіх: 200 OK, валідне тіло, зелений тест — і чужі дані на екрані.

    Ця глава — канонічний виклад атакувального кута й означень ескалацій на сайті. Механіку перевірок у коді тут не переказуємо — вона в главі «Авторизація в API»; межу «хто ти» проти «що тобі можна» — у web-главі «Автентифікація та авторизація».

    Ризик №1: що саме ламається

    Контроль доступу (access control) — це виконання політики, за якою користувач не може діяти поза межами наданих йому дозволів; збій зазвичай веде до неавторизованого розкриття, зміни чи знищення даних або до виконання чужої бізнес-функції. Авторизація (authorization) означена так: «процес перевірки того, що запитану дію чи сервіс схвалено для конкретної сутності» (означення NIST, наведене OWASP). Дві межі варто знати в обидва боки: автентифікований користувач не має права на все, що система технічно вміє; і навпаки — неавтентифікований цілком може бути авторизований на публічні ресурси.

    У редакції :2025 (Broken Access Control) лишається номер один, і цифра поруч — про частку застосунків, а не інцидентів: 100% протестованих застосунків мали ту чи іншу форму зламаного контролю доступу. Категорія має найбільше входжень у зібраних даних і другу за величиною кількість повʼязаних .

    Межі категорії не інтуїтивні. Провідними названо CWE-200 і CWE-201 (розкриття чутливої інформації), CWE-352 (CSRF) і CWE-918 () — тобто CSRF і SSRF у редакції 2025 живуть усередині контролю доступу, і окремої позиції SSRF більше не має. Чому саме тут, видно із запису каталогу: підставивши URL на несподіваний хост, шле запит ніби руками сервера й обходить контроль доступу на кшталт файрвола, який не пускає його туди напряму. Механіка самої — тема глави про SSRF.

    Типові дефекти категорії: порушення принципу (least privileges), коли доступ, розрахований на конкретні ролі, відкритий будь-кому; обхід перевірок правкою URL, внутрішнього стану застосунку чи HTML-сторінки або інструментом, який змінює API-запити; і — «дозвіл переглядати чи редагувати чужий акаунт, надавши його унікальний ідентифікатор». Серед сценаріїв атаки джерело наводить два, які прямо про це: , коли атакувальник просто відкриває цільову адресу, бо прав адміністратора для неї ніхто не перевіряє, — і застосунок, який «кладе весь свій контроль доступу у фронтенд», після чого береться прямим запитом повз браузер. Канонічно forced browsing означено як перебір і доступ до ресурсів, на які застосунок не посилається, але які лишаються досяжними; успіх приписано поганій реалізації механізму авторизації.

    «Перевіряємо майже всюди» дефект не закриває: пропущена одна-єдина перевірка вже ставить під конфіденційність або цілісність ресурсу. Означень ескалацій категорія не дає — канонічне розведення двох осей живе в процедурі -ATHZ-03, з якої починається наступний підрозділ. Карта ризиків цілком — глава «Безпека очима QA».

    Дві осі ескалації: вертикальна і горизонтальна

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

    ВісьРівень прав жертвиПриклад із джерелаЩо потрібно для тесту
    Вертикальна (vertical escalation)вищий за нашадміністративні права в застосункузвичайний і привілейований акаунти
    Горизонтальна (horizontal escalation)такий самийчужі дані в онлайн-банкудвоє рівних користувачів

    Вісь визначається рівнем прав акаунта-жертви, а не тим, що саме підмінили: той самий прийом дає проти рівного акаунта й вертикальну, коли підмінений ключ виявляється прапорцем адміністратора. Горизонтальну вісь канонічні джерела називають трьома різними назвами — WSTG каже horizontal escalation, шпаргалка OWASP — horizontal privilege elevation, MITRE — Horizontal Authorization; спільне в усіх трьох одне: однаковий рівень прав у двох сторін.

    Вектори з процедури WSTG

    Мета тесту сформульована прямо: переконатися, що користувач не може змінити свої привілеї чи ролі всередині застосунку. Базова техніка — повторити функцію під іншим користувачем. Чотири вектори з тих, що названі поіменно:

    • група й обʼєкт — підміна параметрів groupID і orderID користувачем, який до тієї групи не належить;
    • профіль — приховане поле форми зі значенням профілю; питання джерела дослівне: «What if the tester modifies the value of the variable profile to SysAdmin?»;
    • IP-адреса — якщо застосунок вважає X-Forwarded-For адресою клієнта, підміна заголовка обходить обмеження за IP;
    • обхід сайту — пройтися сторінками й пошукати ті, на яких перевірки авторизації просто немає.

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

    Поле, що несе привілей

    Приховане поле форми — не деталь верстки, а повноцінний вхід негативного сценарію. Керований користувачем ключ живе у трьох місцях: приховане поле HTML-форми, параметр URL або незашифрована cookie. Коли такий ключ фактично є прапорцем адміністративного статусу, підміна дає вже , і тут інший, ніж у звичайній перевірці поля: джерело питає не «чи прийняли поле», а «чи вдалося стати адміністратором».

    У словнику API це рівень властивостей обʼєкта: API3:2023 зі спільною першопричиною «брак або неправильна валідація авторизації на рівні властивості обʼєкта» — на відміну від BOLA, де порушення на цілому обʼєкті. У веб-редакції 2025 mass assignment стоїть в іншій категорії — A08 Software or Data Integrity Failures, поіменно як CWE-915. Процедура перевірки таких полів — тема розділу про API.

    IDOR: чужий обʼєкт за ідентифікатором

    IDOR (Insecure Direct Object Reference) — , коли атакувальник дістає або змінює обʼєкти, маніпулюючи ідентифікаторами в URL чи параметрах застосунку; причина названа прямо — відсутні перевірки доступу, які мали б зʼясувати, чи має користувач право на ці дані. Складників рівно три: обʼєкт (акаунт, документ, тікет, ), посилання на нього (ID, UUID, номер рахунку, токен або slug) і відсутня перевірка авторизації на рівні обʼєкта. Канонічний приклад в одну стрічку: /users/123 міняється на /users/124 — якщо показалися чужі дані, застосунок вразливий.

    Мовою OWASP API Security Top 10 та сама вада зветься BOLA (Broken Object Level Authorization) і очолює список як API1:2023. Формулювання там точніше: доступ до самого ендпоінта законний за задумом, а порушення відбувається на рівні обʼєкта через маніпуляцію ідентифікатором. Поширена вона тому, що сервер не тримає стан клієнта й покладається на ідентифікатори від нього. Наслідки не зводяться до читання чужого: розкриття, втрата й зміна даних, іноді повне захоплення акаунта.

    Ідентифікатор може бути числом, UUID або довільним рядком — і незалежно від типу його легко знайти в шляху, query, заголовках або тілі. Складний ідентифікатор захистом не є: GUID робить підбір практично неможливим, але перевірки лишаються обовʼязковими, а витеклу адресу застосунок зобовʼязаний заблокувати. Випадкові id — додатковий шар (defense-in-depth), а не заміна авторизації.

    Три назви поруч — і жодне джерело не ставить між ними знак рівності. Клас «підміна ключа» має точний ідентифікатор — CWE-639 Authorization Bypass Through User-Controlled Key: авторизація не заважає одному користувачеві дістати дані іншого підміною ключа, яким ці дані ідентифікуються. Межі проведено явно: IDOR ширший за CWE-639, бо покриває ще й (CWE-22), а BOLA з ним лише частково перетинається. Ланку тримає шпаргалка OWASP: керований користувачем ключ пошуку — це CWE-639, і сам цей клас є формою IDOR.

    Поруч живе межа з BFLA (Broken Function Level Authorization): якщо атакувальник дістався до ендпоінта, до якого не мав доступу, — це вже вона. Головне тут — не злити два різні розрізи в один. BOLA і BFLA розводяться за рівнем, на якому зламалася перевірка (обʼєкт проти функції), а ескалації — за рівнем прав акаунта-жертви. Спрощення «BOLA — це горизонталь, BFLA — вертикаль» виглядає акуратним і саме тому небезпечне: воно ховає найдорожчий випадок — поле-, яке з горизонтального вектора робить вертикальний.

    Ні

    Так

    Ні

    Так

    Запит із валідними даними для входу

    Роль дозволяє цю функцію?

    Відмова. Пропуск перевірки тут - BFLA

    Обʼєкт належить цьому користувачу?

    Відмова. Пропуск перевірки тут - BOLA

    Операція виконується

    Ні

    Так

    Ні

    Так

    Запит із валідними даними для входу

    Роль дозволяє цю функцію?

    Відмова. Пропуск перевірки тут - BFLA

    Обʼєкт належить цьому користувачу?

    Відмова. Пропуск перевірки тут - BOLA

    Операція виконується

    Процедура пошуку теж не вигадана: завести User A і User B з різними обсягами прав, автентифікуватися як A, лізти в обʼєкти B через підміну посилань у запитах і чекати незалежно від того, вгадуваний ідентифікатор чи ні. Робити це для всіх операцій із посиланням на обʼєкт — читання, створення, оновлення, видалення, експорт і адміністративних дій. Порівняння id із сесії з параметром розвʼязанням не є, бо закриває малу підмножину випадків; радикальніше — не виставляти ідентифікатор у URL і тілі POST узагалі, а поточного користувача брати з інформації сесії. Ту саму механіку веб-редакція Top 10:2025 тримає серед типових дефектів A01, а готові перевірки з кодом — глава «Авторизація в API».

    Forced browsing: чого немає в меню, але воно є

    Означення вже прозвучало вище: перебір і доступ до ресурсів, на які застосунок не посилається, але які лишаються досяжними. Ключове слово тут — «не посилається»: відсутність лінка в інтерфейсі не робить ресурс недосяжним, і саме на цьому розриві живе атака. Те саме явище зустрічається під назвами Predictable Resource Location, File Enumeration, Directory Enumeration і Resource Enumeration.

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

    Оракул простий і зручний для чекліста: відповідь 200 на адресу, якої в застосунку «немає», — це знахідка, яку далі оглядають руками. А от куди дивитися після неї, джерело каже прямо: «A bad implementation of the authorization mechanism contributed to this attack's success.» Тобто «зробимо адреси незгадуваними» дефект не лікує, це лише підвищує ціну перебору. Той самий крок є і в процедурі тестування ескалації — обійти сайт і пошукати сторінки, на яких перевірки авторизації немає; а знайдена сторінка може лишитися відкритою навіть за наявної перевірки, якщо та зроблена за частковим збігом URL.

    Моделі доступу й матриця доступів

    Модель контролю доступу відповідає на питання, за чим саме система ухвалює рішення: за ролями, за атрибутами чи за звʼязками.

    • (Role-Based Access Control) — рішення за ролями: права вішаються не на сутність, а на роль, і сутність успадковує права своїх ролей. Хвороба моделі названа поіменно — («role explosion»).
    • (Attribute-Based Access Control) — рішення за атрибутами субʼєкта, атрибутами обʼєкта, умовами середовища й політиками, сформульованими в цих атрибутах і умовах (означення NIST SP 800-162, наведене OWASP).
    • (Relationship-Based Access Control) — рішення за звʼязками між ресурсами: «allowing only the user who created a post to edit it».

    Звичний порядок «спочатку ролі» варто супроводити рекомендацією джерела: RBAC має довгу історію й лишається популярним, проте для розробки застосунків зазвичай варто віддавати перевагу ABAC і ReBAC. Ламкість складних моделей теж пояснено: політики з ієрархіями, групами й ролями та нечітке розділення адміністративних і звичайних функцій самі породжують дефекти авторизації. Для тестувальника модель визначає стовпець «субʼєкт»: роль для RBAC, атрибути й умови середовища для ABAC, звʼязок «автор ↔ обʼєкт» для ReBAC — а остання вимагає двох акаунтів і чужого обʼєкта, а не двох ролей.

    Правило побудови матриці доступів записане дослівно: «For every combination of user type and resource, determine what operations, if any, the user (based on role and/or other attributes) must be able to perform on that resource.» Три наслідки з цього речення:

    • матриця будується перебором пар «тип користувача × ресурс», а не переліком знайомих сценаріїв;
    • слова «роль та/або інші атрибути» одразу відкривають її під ABAC, а не лише під ролі;
    • перебір утілює найменші привілеї — рівно той мінімум прав, який потрібен для роботи.

    Клітинка, яку не заповнили, читається як «заборонено»: застосунок має відмовляти за замовчуванням. Вибіркове не рахується — «Validating permissions correctly on just the majority of requests is insufficient», тож дірка в одному рядку знецінює решту. І рядок ставиться на екземпляр, а не лише на тип: право на обʼєкти певного типу не є правом на кожен обʼєкт цього типу.

    Мати тести матриця зобовʼязана — вимога джерел, а не ініціатива QA: шпаргалка авторизації каже «Create tests that validate that the permissions mapped out in the design phase are being correctly enforced», список ризиків API вимагає писати тести на механізм авторизації, а веб-редакція Top 10 кладе роботу прямо на нас — «розробники й QA-персонал мають включати функціональний контроль доступу у свої модульні та інтеграційні тести». Перевіряють не лише дозволи, а й поведінку при відмові: , безпечне завершення роботи при провалі перевірки навіть у нештатних умовах, дотримання ABAC-політик. І рядок, який забувають: збої контролю доступу треба логувати й піднімати алерт адміністраторам.

    Очікуваний код негативної клітинки канон обмежує з одного боку й лишає відкритим з іншого. Межа є: шпаргалка вимагає, щоб система віддала 403 Forbidden або 404 Not Found — і ніколи 200 OK. А от вибору між цими двома канон не робить: MDN легітимізує політику, за якої замість 403 сервер віддає 404, щоб не підтверджувати саме існування ресурсу. Тож конкретний код клітинка фіксує за домовленістю конкретного сервісу, інакше тест перевіряє уявлення свого автора, а не контракт.

    Чому матрицю доводиться переганяти щорелізно, джерело формулює як діагноз: «features are added/modified in updated releases without determining their effect on the application's authorizations» — тому оцінювання авторизацій радять автоматизувати й виконувати на кожен новий реліз, а регресійна шпаргалка називає це проблемою «другого дня». Формально безпека — нефункціональна характеристика за ISTQB, але перевіряється функціональними сценаріями. Побудова клітинок і data-driven прогін — глава «Авторизація в API»; як код і гейти в — глава «Автоматизація security-перевірок для AQA/SDET».

    Перевірка доступу живе на сервері

    Позиція джерела сформульована як заборона, а не порада: «Developers must never rely on client-side access control checks». І одразу — де перевірка мусить стояти: «Access control checks must be performed server-side, at the gateway, or using serverless function». Тобто захована кнопка, вимкнене поле чи прихований пункт меню не є перевіркою прав.

    Три правила, які з цього випливають: перевіряти кожен запит, бо пропущена одна-єдина перевірка вже ставить під загрозу конфіденційність або цілісність; право на тип не є правом на екземпляр, тож перевірку роблять на кожен запит до конкретного обʼєкта чи функції; заборона за замовчуванням — якщо жодне правило не збіглося, доступу немає. В API це формулюється ще жорсткіше: кожен ендпоінт, що приймає id обʼєкта й виконує над ним дію, мусить мати перевірку рівня обʼєкта, яка підтверджує права залогіненого користувача на запитану дію над запитаним обʼєктом.

    Ламається це трьома способами, і всі три вже траплялися вище: сторінки без перевірки взагалі; перевірка половинчаста (частковий збіг URL обходиться кодуванням); довіра до входу, керованого клієнтом, — приховане поле профілю або X-Forwarded-For, узятий за адресу клієнта.

    Хороша новина: оракул уже у відповіді. Щоб зрозуміти, чи вдався запит до чужого обʼєкта, ані бази, ані логів зазвичай не потрібно — досить того, що повернув сервер. Сценарій із цього й складається: повторити функцію під іншим користувачем.

    // Схована кнопка — це ще не перевірка прав.
    await expect(page.getByRole('button', { name: 'Видалити проєкт' })).toBeHidden();
    
    // Вердикт дає сервер: той самий виклик повз інтерфейс, під іншим користувачем.
    const expectedStatus = 403; // код відмови з контракту сервісу, а не універсальна константа
    const res = await userB.delete('/api/projects/1');
    expect(res.status(), 'чужий проєкт не має видалятися').toBe(expectedStatus);

    Звідси два наслідки. Негативний прогін ставлять на всі операції, не лише на читання: створення, оновлення, видалення, експорт і адміністративні дії теж. І «змінили тільки фронтенд» від прогону не звільняє — регресія доступу ловиться саме серверними сценаріями.

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

    • «Кнопки в інтерфейсі немає — значить, доступу немає» → виглядає як перевірка прав, а насправді перевірено малюнок: сценарій джерела — саме прямий запит повз фронтенд.
    • «Перейшли на UUID — IDOR закрито» → виглядає як виправлення, а насправді складний ідентифікатор лише підвищує ціну підбору: перевірки лишаються обовʼязковими, а витеклу адресу застосунок мусить відхилити.
    • «BOLA — це горизонталь, BFLA — вертикаль» → виглядає як акуратна пара, а насправді це два різні розрізи: рівень порушення проти рівня прав жертви. Поле-прапорець робить із горизонталі вертикаль — і саме це пара ховає.
    • «IDOR, BOLA і CWE-639 — три назви одного» → виглядає як синонімія, а насправді IDOR ширший за CWE-639, бо покриває ще й path traversal, а BOLA перетинається з ним лише частково.
    • «Прогнали матрицю під адміном — усе зелено» → виглядає як покриття, а насправді негативних клітинок під адміном майже не буває: без звичайного користувача й чужого власника перевірки прав не було.
    • «Ресурс не залінкований — його не знайдуть» → виглядає як приховування, а насправді forced browsing означений саме як доступ до незалінкованого й лікується авторизацією, а не імʼям файлу.
    • «Змінили тільки фронтенд — доступи чіпати не треба» → виглядає як економія прогону, а насправді проблеми з авторизаціями й виникають тому, що фічі змінюють, не визначивши їхнього впливу на права.

    Підсумок

    • Контроль доступу — це виконання політики «не діяти поза межами дозволів». Його збій стоїть першим у списку ризиків, і цифра поруч — про частку застосунків.
    • Дві осі ескалації означені за рівнем прав акаунта-жертви: вертикальна — привілейованіший акаунт, горизонтальна — акаунт із такими самими правами. BOLA і BFLA про інше — про рівень, на якому зламалася перевірка; зводити ці розрізи в один не можна.
    • IDOR шукається процедурою, а не інтуїцією: два акаунти, підміна посилань під чужим користувачем, відмова незалежно від вгадуваності ідентифікатора — і так для всіх операцій, не лише для читання.
    • Незалінкований і непередбачуваний не означає захищений. Forced browsing живе на розриві між «немає лінка» і «ресурс досяжний», а причина знахідки — авторизація.
    • Вердикт про доступ виносить сервер. Клієнтські перевірки не рахуються, перевіряти треба кожен запит і кожен обʼєкт, а незаповнена клітинка матриці читається як «заборонено».

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

    • «Чим вертикальна ескалація відрізняється від горизонтальної?» — на впізнавання означень. Сильна відповідь визначає обидві через рівень прав жертви й дає приклад на кожну; слабка привʼязує осі до BOLA/BFLA.
    • «Що таке IDOR і як ти його шукатимеш?» — чекають механізм і процедуру: два акаунти, підміна посилання, відмова незалежно від вгадуваності id, покриття всіх операцій, а не самого читання.
    • «Ми перейшли на UUID — IDOR більше немає?» — пастка на security by obscurity. Правильна відповідь: складний ідентифікатор це додатковий шар, а не заміна перевірки прав.
    • «Кнопка адмінки прихована для звичайного користувача. Цього достатньо?» — питання рівно про місце перевірки. Очікують «ні» і сценарій прямого запиту повз інтерфейс під іншим користувачем.
    • «Як побудуєш покриття доступів для трьох ролей?» — дивляться, чи будуєте перебором комбінацій «тип користувача × ресурс × операція», чи перелічуєте знайомі сценарії. Плюс бали за негативні клітинки, дефолт «заборонено» і код відмови з контракту сервісу.
    • «Чим RBAC відрізняється від ABAC?» — на розуміння моделі, а не визначення напамʼять. Сильна відповідь додає рекомендацію канонічної шпаргалки віддавати перевагу ABAC і ReBAC.

    Джерела

    Ризик №1: що саме ламається

    • OWASP Top 10:2025 — A01 Broken Access Control — означення контролю доступу й наслідків збою, перше місце категорії та «100% протестованих застосунків», провідні CWE, типові дефекти й два сценарії атаки — forced browsing і контроль доступу, покладений у фронтенд.
    • OWASP Top 10:2025 — Introduction — категорія лишається ризиком №1 у редакції 2025, а SSRF влито в неї й окремої позиції не має.
    • OWASP Cheat Sheet — Authorization — означення авторизації за NIST, обидві межі «автентифікований проти авторизованого» і теза, що правильної перевірки на більшості запитів недостатньо.
    • CWE-918 — Server-Side Request Forgery (SSRF) — запис каталогу фіксує перехід SSRF у категорію A01:2025 і пояснює, чому запит руками сервера обходить контроль доступу.
    • OWASP www-community — Forced browsing — канонічне означення атаки, названої серед сценаріїв категорії, і приписування її успіху поганій реалізації авторизації.
    • OWASP WSTG — 4.5.3 Testing for Privilege Escalation — означень ескалацій список ризиків не дає: канонічне розведення осей живе в цій процедурі.

    Дві осі ескалації: вертикальна і горизонтальна

    • OWASP WSTG — 4.5.3 Testing for Privilege Escalation — означення ескалації та її ступеня, канонічне розведення осей, мета тесту, вектори процедури й зауваження про частковий збіг URL.
    • CWE-639 — Authorization Bypass Through User-Controlled Key — вісь визначає рівень прав жертви; ключ-прапорець адміністратора дає вертикаль; три місця, де такий ключ живе; назва Horizontal Authorization.
    • OWASP Cheat Sheet — Authorization — та сама вісь як horizontal privilege elevation і те, що експлуатація керованого користувачем ключа дає найчастіше горизонтальну ескалацію, рідше вертикальну.
    • OWASP API Security Top 10 — 2023API5:2023 про складні політики як причину вертикального вектора і API3:2023 як обʼєднання надмірного розкриття даних із масовим присвоєнням.
    • OWASP API1:2023 — Broken Object Level Authorization — межа рівнів: порушення на цілому обʼєкті проти порушення на його полях.
    • OWASP Top 10:2025 — Software or Data Integrity Failuresmass assignment у веб-редакції 2025 стоїть у A08 поіменно як CWE-915, і рамка категорії пояснює, чому це про цілісність.

    IDOR: чужий обʼєкт за ідентифікатором

    • OWASP Cheat Sheet — Insecure Direct Object Reference Prevention — означення IDOR і три складники, приклад /users/123, теза «складний ідентифікатор захистом не є» та процедура з двома акаунтами й переліком операцій.
    • OWASP API1:2023 — Broken Object Level Authorization — законний за задумом ендпоінт і порушення на рівні обʼєкта, типи ідентифікаторів і місця, де вони живуть, наслідки аж до захоплення акаунта, межа з BFLA і недостатність порівняння id сесії з параметром.
    • OWASP API Security Top 10 — 2023 — BOLA як ризик номер один редакції 2023 і API5:2023 про доступ до чужих ресурсів та адміністративних функцій.
    • CWE-639 — Authorization Bypass Through User-Controlled Key — означення класу «підміна ключа» і межі термінів: IDOR ширший за CWE-639, BOLA перетинається з ним лише частково.
    • OWASP Cheat Sheet — Authorization — ланка, що звʼязує терміни: керований користувачем ключ пошуку є формою IDOR.
    • OWASP Top 10:2025 — A01 Broken Access Control — та сама механіка у веб-редакції списку: перегляд чи редагування чужого акаунта за його унікальним ідентифікатором.

    Forced browsing: чого немає в меню, але воно є

    • OWASP www-community — Forced browsing — означення атаки й синоніми, механіка перебору й типові цілі, два режими виконання, приклад адреси з логіном і датою, оракул 200 та приписування успіху поганій реалізації авторизації.
    • OWASP WSTG — 4.5.3 Testing for Privilege Escalation — той самий крок усередині процедури тестування ескалації й обхід перевірки за частковим збігом URL кодуванням адреси.

    Моделі доступу й матриця доступів

    • OWASP Cheat Sheet — Authorization — означення RBAC, ABAC і ReBAC, «role explosion», рекомендація віддавати перевагу ABAC і ReBAC, правило побудови матриці, найменші привілеї, заборона за замовчуванням, недостатність покриття «більшості» запитів, право на тип проти права на екземпляр і вимога мати тести на дозволи.
    • OWASP API Security Top 10 — 2023API5:2023 про складні політики з ієрархіями й нечітке розділення адміністративних функцій як джерело дефектів авторизації.
    • OWASP API1:2023 — Broken Object Level Authorization — перевірка прав у кожній функції, що бере ідентифікатор від клієнта, і пряма вимога писати тести на механізм авторизації.
    • OWASP Top 10:2025 — A01 Broken Access Control — функціональний контроль доступу в модульних та як робота розробників і QA, а також вимога логувати збої контролю доступу.
    • MDN — 403 Forbidden — політика, за якої замість 403 віддають 404, легітимна, тож очікуваний код клітинки береться з домовленості сервісу.
    • ISTQB® CTFL Syllabus v4.0.1, §2.2.2 — безпека належить до нефункціональних характеристик, хоча перевіряється функціональними сценаріями.
    • OWASP Cheat Sheet — Authorization Testing Automation — більшість проблем з авторизаціями виникає через зміни фіч у нових релізах без оцінки їхнього впливу на права, звідси й порада перевіряти на кожен реліз.
    • OWASP Cheat Sheet — Authorization Regression Testing — той самий стан як проблема «другого дня»: разова перевірка на старті наступних релізів не покриває; звідти ж межа очікуваного коду негативної клітинки — 403 або 404, ніколи 200.

    Перевірка доступу живе на сервері

    • OWASP Cheat Sheet — Authorization — заборона покладатися на клієнтські перевірки й перелік місць, де перевірка мусить виконуватися; перевірка на кожному запиті, право на тип проти права на екземпляр і заборона за замовчуванням.
    • OWASP API1:2023 — Broken Object Level Authorization — вимога перевірки рівня обʼєкта на кожному ендпоінті з id і теза, що для вердикту достатньо самої відповіді сервера.
    • OWASP WSTG — 4.5.3 Testing for Privilege Escalation — сценарій «повторити функцію під іншим користувачем» і три способи, якими серверна перевірка ламається на практиці.
    • OWASP Cheat Sheet — Insecure Direct Object Reference Prevention — перелік операцій, на які планують негативний прогін, і теза, що складність ідентифікатора перевірок не скасовує.

    Пояснення

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

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

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