Heim  >  Fragen und Antworten  >  Hauptteil

So überprüfen Sie die Abfragetiefe und -komplexität in Laravel Lighthouse

<p>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. </p> <p>In der Lighthouse-Dokumentation wird <code>config/lighthouse.php</code> erwähnt. </p> <pre class="brush:php;toolbar:false;">/* |------------------------------------------------- --------- |. 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, ], </pre> <p>Und es wird empfohlen, https://webonyx.github.io/graphql-php/security/ zu lesen. </p> <p>In diesem Link geben sie einige Beispiele: </p> <pre class="brush:php;toolbar:false;">verwende GraphQLGraphQL; verwenden Sie GraphQLValidatorRulesQueryComplexity; verwenden Sie GraphQLValidatorDocumentValidator; $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pre> <pre class="brush:php;toolbar:false;">verwende GraphQLGraphQL; verwenden Sie GraphQLValidatorRulesQueryDepth; verwenden Sie GraphQLValidatorDocumentValidator; $rule = new QueryDepth($maxDepth = 10); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pre> <p>Aber wie wendet man diese im Leuchtturm an? </p> <p>Zuerst habe ich diesen Code in <code>ExampleQuery.php(php artisan lighthouse:query exampleQuery)</code> geschrieben. </p> <pre class="brush:php;toolbar:false;">finale Klasse exampleQuery { öffentliche Funktion __invoke(_, Array $args) { $rule = new QueryComplexity(2); DocumentValidator::addRule($rule); $rule2 = new QueryDepth(2); DocumentValidator::addRule($rule2); zurückkehren [ ... ]; } } </pre> <p>Aber das wird keine Probleme verursachen.</p> <p>Ich glaube, Lighthouse wurde in <code>vendor/nuwave/.../GraphQLController.php</code> gestartet, sodass ich <code>GraphQL::executeQuery(/*...*) nicht ausführen kann. / );</code></p> Die <p><code>@complexity</code>-Direktive funktioniert auch nicht, <code>@complexity(resolver: "App\Security\ComplexityAnalyzer@userPosts")</code> userPosts-Funktion. </p> <pre class="brush:php;toolbar:false;">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; } } </pre> <p>Was habe ich verpasst? Bitte hilf mir, gut zu schlafen. </p>
P粉419164700P粉419164700442 Tage vor604

Antworte allen(1)Ich werde antworten

  • P粉717595985

    P粉7175959852023-08-29 14:32:38

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

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

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

    Antwort
    0
  • StornierenAntwort