찾다

 >  Q&A  >  본문

Laravel Lighthouse에서 쿼리 깊이와 복잡성을 확인하는 방법

<p>Lighthouse를 프로덕션 서버에 배포하기 전에 보안을 확인합니다(https://www.howtographql.com/advanced/4-security/). 그래서 쿼리 깊이와 쿼리 복잡성을 확인하기로 결정했습니다. </p> <p>lighthouse 문서에는 <code>config/lighthouse.php</code>가 언급되어 있습니다. </p> <pre class="brush:php;toolbar:false;">/* |------------------------------------------------- ------------- 보안 | |------------------------------------------------- ------------- | | 보안 관련 쿼리 검증을 처리하는 Control Lighthouse입니다. | 자세한 내용은 https://webonyx.github.io/graphql-php/security/ | */ '보안' => 'max_query_complexity' => GraphQLValidatorRulesQueryComplexity::DISABLED, 'max_query_length' => GraphQLValidatorRulesQueryDepth::DISABLED, 'disable_introspection' => GraphQLValidatorRulesDisableIntrospection::DISABLED, ], </pre> <p>그리고 https://webonyx.github.io/graphql-php/security/를 읽어보는 것이 좋습니다. </p> <p>이 링크에는 몇 가지 예가 나와 있습니다. </p> <pre class="brush:php;toolbar:false;">GraphQLGraphQL을 사용하세요. GraphQLValidatorRulesQueryComplexity를 사용하세요. GraphQLValidatorDocumentValidator를 사용하세요. $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pre> <pre class="brush:php;toolbar:false;">GraphQLGraphQL을 사용하세요. GraphQLValidatorRulesQueryDepth를 사용하세요. GraphQLValidatorDocumentValidator를 사용하세요. $rule = new QueryDepth($maxDepth = 10); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pre> <p>그런데 이것을 등대에 어떻게 적용할까요? </p> <p>먼저 이 코드를 <code>ExampleQuery.php(php artisan lighthouse:queryExampleQuery)</code>에 작성했습니다. </p> <pre class="brush:php;toolbar:false;">최종 클래스 예제쿼리 { 공개 함수 __invoke(_, 배열 $args) { $rule = 새로운 쿼리복잡성(2); DocumentValidator::addRule($rule); $rule2 = 새로운 쿼리 깊이(2); DocumentValidator::addRule($rule2); 반품 [ ... ]; } } </pre> <p>그러나 이것은 아무런 문제도 일으키지 않습니다.</p> <p>Lighthouse가 <code>vendor/nuwave/.../GraphQLController.php</code>에서 시작된 것 같아서 <code>GraphQL::executeQuery(/*...* / );</code></p> <p><code>@complexity</code> 지시문도 작동하지 않습니다. <code>@complexity(resolver: "App\Security\ComplexityAnalyzer@userPosts")</code> userPosts 함수 . </p> <pre class="brush:php;toolbar:false;">클래스 ComplexityAnalyzer { 공용 함수 userPosts(int $childrenComplexity, array $args): int // 호출되지 않음 { $postComplexity = $args['includeFullText'] ? 삼 : 2; Log::Debug($postComplexity); // 호출되지 않음 $childrenComplexity * $postComplexity를 반환합니다. } } </pre> <p>내가 무엇을 놓쳤나요? 잘 자도록 도와주세요. </p>
P粉419164700P粉419164700453일 전613

모든 응답(1)나는 대답할 것이다

  • P粉717595985

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

    이미 구현되어 있으므로 값만 설정하면 됩니다.

    으아악

    복잡도 점수 계산은 @complexity 지시어를 사용하여 각 필드에 대해 수정할 수 있습니다.

    회신하다
    0
  • 취소회신하다