Natura flexibilă a GraphQL prezintă o vulnerabilitate critică: un atacator poate trimite o interogare ciclică infinită (ex: autor { carti { autor { carti { ... } } } }) care să blocheze serverul și baza de date. Protecția necesită două mecanisme complementare: Depth Limiting și Cost Analysis.
Configurarea regulilor de validare în Apollo Server
import { ApolloServer } from '@apollo/server';
import depthLimit from 'graphql-depth-limit';
import { createComplexityLimitRule } from 'graphql-validation-complexity';
const server = new ApolloServer({
typeDefs,
resolvers,
validationRules: [
// 1. Respinge orice cerere care depășește o adâncime de 6 niveluri imbricate:
depthLimit(6),
// 2. Calculează complexitatea fiecărui câmp și limitează scorul maxim la 1000:
createComplexityLimitRule(1000, {
onCost: (cost) => console.log('Cost interogare calculat:', cost),
formatErrorMessage: (cost) =>
`Interogarea a fost respinsă! Costul (${cost}) depășește limita admisă de 1000.`
})
]
});
Întrebări & Exemple de Cod:
Securitate și Limitarea Interogărilor în GraphQL: Depth Limiting și Analiza ComplexitățiiAi o nelămurire despre utilizarea comenzii
Securitate și Limitarea Interogărilor în GraphQL: Depth Limiting și Analiza Complexitățiisau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.