So überprüfen Sie die Abfragetiefe und -komplexität in Laravel Lighthouse
David Beckham
David Beckham 2023-08-28 21:26:41
0
1
556

Bevor ich Lighthouse auf einem Produktionsserver bereitstelle, überprüfe ich die Sicherheit (https://www.howtographql.com/advanced/4-security/). Deshalb habe ich beschlossen, die Abfragetiefe und die Abfragekomplexität zu überprüfen.

In der Lighthouse-Dokumentation wird config/lighthouse.php erwähnt.

/* |------------------------------------------------- --------- |. Sicherheit |------------------------------------------------- --------- | |. Kontrollieren Sie Lighthouse, um die sicherheitsrelevante Abfrageüberprüfung durchzuführen. |. Ausführliche Lektüre: https://webonyx.github.io/graphql-php/security/ | */ 'Sicherheit' => 'max_query_complexity' => GraphQLValidatorRulesQueryComplexity::DISABLED, 'max_query_length' => GraphQLValidatorRulesQueryDepth::DISABLED, 'disable_introspection' => GraphQLValidatorRulesDisableIntrospection::DISABLED, ], 

Und es wird empfohlen, https://webonyx.github.io/graphql-php/security/ zu lesen.

In diesem Link geben sie einige Beispiele:

verwende GraphQLGraphQL; verwenden Sie GraphQLValidatorRulesQueryComplexity; verwenden Sie GraphQLValidatorDocumentValidator; $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); 
verwende GraphQLGraphQL; verwenden Sie GraphQLValidatorRulesQueryDepth; verwenden Sie GraphQLValidatorDocumentValidator; $rule = new QueryDepth($maxDepth = 10); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); 

Aber wie wendet man diese im Leuchtturm an?

Zuerst habe ich diesen Code in ExampleQuery.php(php artisan lighthouse:query exampleQuery) geschrieben.

finale Klasse exampleQuery { öffentliche Funktion __invoke(_, Array $args) { $rule = new QueryComplexity(2); DocumentValidator::addRule($rule); $rule2 = new QueryDepth(2); DocumentValidator::addRule($rule2); zurückkehren [ ... ]; } } 

Aber das wird keine Probleme verursachen.

Ich glaube, Lighthouse wurde in vendor/nuwave/.../GraphQLController.php gestartet, sodass ich GraphQL::executeQuery(/*...*) nicht ausführen kann. / );

Die

@complexity-Direktive funktioniert auch nicht, @complexity(resolver: "App\Security\ComplexityAnalyzer@userPosts") userPosts-Funktion.

class ComplexityAnalyzer { öffentliche Funktion userPosts(int $childrenComplexity, array $args): int // nicht aufgerufen { $postComplexity = $args['includeFullText'] ? 3 : 2; Log::Debug($postComplexity); // nicht aufgerufen return $childrenComplexity * $postComplexity; } } 

Was habe ich verpasst? Bitte hilf mir, gut zu schlafen.

David Beckham
David Beckham

Antworte allen (1)
P粉717595985

它已经实现了,你只需要设置值。

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

复杂度分数计算可以使用@complexity指令对每个字段进行修改。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!