Laravel Lighthouse에서 쿼리 깊이와 복잡성을 확인하는 방법
P粉419164700
P粉419164700 2023-08-28 21:26:41
0
1
557

Lighthouse를 프로덕션 서버에 배포하기 전에 보안을 확인합니다(https://www.howtographql.com/advanced/4-security/). 그래서 쿼리 깊이와 쿼리 복잡성을 확인하기로 결정했습니다.

lighthouse 문서에는 config/lighthouse.php가 언급되어 있습니다.

/* |------------------------------------------------- ------------- 보안 | |------------------------------------------------- ------------- | | 보안 관련 쿼리 검증을 처리하는 Control Lighthouse입니다. | 자세한 내용은 https://webonyx.github.io/graphql-php/security/ | */ '보안' => 'max_query_complexity' => GraphQLValidatorRulesQueryComplexity::DISABLED, 'max_query_length' => GraphQLValidatorRulesQueryDepth::DISABLED, 'disable_introspection' => GraphQLValidatorRulesDisableIntrospection::DISABLED, ], 

그리고 https://webonyx.github.io/graphql-php/security/를 읽어보는 것이 좋습니다.

이 링크에는 몇 가지 예가 나와 있습니다.

GraphQLGraphQL을 사용하세요. GraphQLValidatorRulesQueryComplexity를 사용하세요. GraphQLValidatorDocumentValidator를 사용하세요. $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); 
GraphQLGraphQL을 사용하세요. GraphQLValidatorRulesQueryDepth를 사용하세요. GraphQLValidatorDocumentValidator를 사용하세요. $rule = new QueryDepth($maxDepth = 10); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); 

그런데 이것을 등대에 어떻게 적용할까요?

먼저 이 코드를 ExampleQuery.php(php artisan lighthouse:queryExampleQuery)에 작성했습니다.

최종 클래스 예제쿼리 { 공개 함수 __invoke(_, 배열 $args) { $rule = 새로운 쿼리복잡성(2); DocumentValidator::addRule($rule); $rule2 = 새로운 쿼리 깊이(2); DocumentValidator::addRule($rule2); 반품 [ ... ]; } } 

그러나 이것은 아무런 문제도 일으키지 않습니다.

Lighthouse가 vendor/nuwave/.../GraphQLController.php에서 시작된 것 같아서 GraphQL::executeQuery(/*...* / );

@complexity 지시문도 작동하지 않습니다. @complexity(resolver: "App\Security\ComplexityAnalyzer@userPosts") userPosts 함수 .

클래스 ComplexityAnalyzer { 공용 함수 userPosts(int $childrenComplexity, array $args): int // 호출되지 않음 { $postComplexity = $args['includeFullText'] ? 삼 : 2; Log::Debug($postComplexity); // 호출되지 않음 $childrenComplexity * $postComplexity를 반환합니다. } } 

내가 무엇을 놓쳤나요? 잘 자도록 도와주세요.

P粉419164700
P粉419164700

모든 응답 (1)
P粉717595985

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

으아악

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

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!