Comment vérifier la profondeur et la complexité des requêtes dans Laravel Lighthouse
P粉419164700
P粉419164700 2023-08-28 21:26:41
0
1
528

Avant de déployer Lighthouse sur un serveur de production, je vérifie la sécurité (https://www.howtographql.com/advanced/4-security/). J'ai donc décidé de vérifier la profondeur et la complexité des requêtes.

Dans la documentation du phare, ils mentionnent config/lighthouse.php.

/* |------------------------------------------------- ----------------------- Sécurité | |------------------------------------------------- ----------------------- | | Control Lighthouse pour gérer la vérification des requêtes liées à la sécurité. | Lecture détaillée : https://webonyx.github.io/graphql-php/security/ | */ 'sécurité' => 'max_query_complexity' => GraphQLValidatorRulesQueryComplexity::DISABLED, 'max_query_degree' => GraphQLValidatorRulesQueryDepth :: DISABLED, 'disable_introspection' => GraphQLValidatorRulesDisableIntrospection::DISABLED, ], ≪/pré> 

Et il est recommandé de lire https://webonyx.github.io/graphql-php/security/.

Dans ce lien, ils donnent quelques exemples :

utilisez GraphQLGraphQL; utilisez GraphQLValidatorRulesQueryComplexity ; utilisez GraphQLValidatorDocumentValidator ; $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator :: addRule ($ règle); GraphQL::executeQuery(/*...*/); ≪/pré> 
utilisez GraphQLGraphQL; utilisez GraphQLValidatorRulesQueryDepth ; utilisez GraphQLValidatorDocumentValidator ; $rule = new QueryDepth($maxDepth = 10); DocumentValidator :: addRule ($ règle); GraphQL::executeQuery(/*...*/); ≪/pré> 

Mais comment les appliquer dans un phare ?

Tout d'abord, j'ai écrit ce code dans ExampleQuery.php(php artisan lighthouse:query SampleQuery).

classe finale ExempleRequête { fonction publique __invoke(_, tableau $args) { $rule = nouveau QueryComplexity(2); DocumentValidator :: addRule ($ règle); $rule2 = nouveau QueryDepth(2); DocumentValidator::addRule($rule2); retour [ ... ]; } } ≪/pré> 

Mais cela ne posera aucun problème.

Je pense que Lighthouse est démarré dans vendor/nuwave/.../GraphQLController.php donc je ne peux pas exécuter GraphQL::executeQuery(/*...* / );

La directive

@complexity ne fonctionne pas non plus, @complexity(resolver: "App\Security\ComplexityAnalyzer@userPosts") Fonction userPosts.

class ComplexityAnalyzer { fonction publique userPosts (int $childrenComplexity, array $args) : int // non appelé { $postComplexity = $args['includeFullText'] ?3 : 2; Log::Debug($postComplexity); // non appelé return $childrenComplexity * $postComplexity; } } ≪/pré> 

Qu’est-ce que j’ai manqué ? S'il vous plaît, aidez-moi à bien dormir.

P粉419164700
P粉419164700

répondre à tous (1)
P粉717595985

C'est déjà implémenté, il vous suffit de définir la valeur.

'security' => [ 'max_query_complexity' => 100, 'max_query_depth' => 10, ],

Le calcul du score de complexité peut être modifié pour chaque champ à l'aide de la directive@complexity.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!