Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Які загальні підводні камені безпеки при використанні при завантаженні () у Graphql


Які загальні підводні камені безпеки при використанні при завантаженні () у Graphql


При використанні `при завантаженні ()` в GraphQL, що, як правило, є методом для умовного завантаження даних або асоціацій (наприклад, у роздільних рішеннях GraphQL на основі ORM) може виникнути кілька загальних підводних каменів безпеки. Ці підводні камені здебільшого стосуються більш широких проблем безпеки GraphQL, але особливо актуальні, оскільки "при завантаженні ()" часто передбачає отримання додаткових вкладених або пов'язаних даних, збільшення складності та ризику.

Загальні підводні камені безпеки з `за допомогою ()` в Graphql

** 1. Непослідовні або відсутні перевірки авторизації
`При завантаженні ()` Часто викликає завантаження вкладених або пов'язаних даних після початкового резолюційного запуску. Якщо логіка авторизації не застосовується послідовно у кожній точці завантаження даних (включаючи ті, що спрацьовують за допомогою `за завантаженням ()`), несанкціоновані користувачі можуть отримати доступ до конфіденційних даних. Це загальна проблема, коли деякі шляхи до одних і тих же даних захищені, але інші (як і через `при завантаженні ()`), не дозволяють зловмисникам обходити контроль доступу [4] [6]. Авторизація повинна здійснюватися як на рівні запитів, так і в межах усіх вкладених резолюцій або навантажувачів даних.

** 2. Надмірні та складні запити, що призводять до відмови в обслуговуванні (DOS)
Використання `при завантаженні ()` може спричинити глибоко вкладені запити, які отримують велику кількість пов'язаних даних. Зловмисники можуть використовувати це шляхом створення запитів, які викликають надмірне завантаження та обробку даних, що призводить до виснаження ресурсів та Дос. Здатність GraphQl отримувати декілька пов'язаних об'єктів в одному запиті робить складним для прогнозування використання ресурсів, а `при завантаженні ()` може посилити це, завантажуючи додаткові дані умовно [4] [5]. Пом'якшення включають обмеження глибини запитів, оцінку складності та обмеження швидкості.

** 3. Експозиція конфіденційних даних за допомогою неправильного вибору поля
Якщо `при завантаженні ()` завантажує пов'язані дані без ретельного контролю над тим, які поля піддаються впливу, чутлива інформація, така як паролі, жетони або дані приватного користувача, можуть бути ненавмисно повернені у відповіді GraphQL [5]. Цей ризик посилюється, якщо перевіри авторизації відсутні або якщо повідомлення про помилки протікають конфіденційну інформацію. Розробники повинні забезпечити, щоб чутливі поля ніколи не піддавалися, навіть коли завантажуються вкладені дані.

** 4. Атаки ін'єкцій за допомогою неправильної перевірки введення
Коли `при завантаженні ()` використовується з динамічними аргументами або фільтрами, неправильна перевірка введення може призвести до вразливості введення, таких як введення запитів Graphql або навіть ін'єкція SQL, якщо основне отримання даних не є належним чином параметризується [6]. Зловмисники можуть вводити шкідливі запити або команди, які маніпулюють логікою отримання даних. Правильна перевірка введення та використання параметризованих запитів є важливими.

** 5. Обхід обмеження швидкості та захисту грубої сили
Оскільки `при завантаженні ()` може спричинити багаторазові вкладені дані в межах одного запиту, зловмисники можуть використовувати це для обходу традиційного обмеження ставок. Наприклад, вони можуть надсилати єдиний складний запит, який запускає багато даних або мутацій, ефективно виконуючи напади грубої сили або перерахування, не запускаючи обмеження на відшкодування [4] [7]. Стратегії обмеження оцінки повинні враховувати складність запитів та вкладені операції.

** 6. Збільшення поверхні атаки внаслідок схеми самоаналізу та інструмента
Використання `при завантаженні ()` часто відображає складну схему з численними вкладеними відносинами. Зловмисники можуть використовувати graphql самоаналіз та інструменти, такі як Graphiql, щоб виявити ці відносини та ремеслові запити, які використовують `при завантаженні ()` для доступу до непередбачуваних даних [1] [8]. Відключення самоаналізу у виробництві або обмеження його уповноваженим користувачам може зменшити цей ризик.

Резюме

Основні підводні камені безпеки при використанні `за завантаженням ()` в graphql обертаються навколо:

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

Пом'якшення включають суворі перевірки авторизації на кожному резолюторі, складність запитів та обмеження глибини, сувору перевірку введення, ретельну конструкцію схеми, відключення інампекції у виробництві та всебічну обмеження швидкості, пристосовану для структури запитів Graphql [3] [5] [6] [8].

Цитати:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerabless-common-attacks/
.
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_ppor
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql