참고 자료 · 37
GraphQL API 보안: 권한 부여, 쿼리 비용 및 증거
객체 및 필드 권한 적용, 서버 작업 제한 및 거부 경로 테스트
업데이트됨 · 3 min
이 가이드가 달성하는 목표
- 노출된 스키마 매핑
- 권한 실행
- 쿼리 비용 제한
- 거부 확인
빠른 확인
- 한 계정이 다른 계정의 객체를 읽을 수 있습니까?
- 민감한 필드가 상위 계정의 접근 결정에 따라 처리됩니까?
- 깊이, 별칭 및 페이지네이션을 함께 사용할 때 비용은 어떻게 됩니까?
- 오류를 통해 어떤 세부 정보가 유출됩니까?
- 거부 및 악용 사례를 누가 관찰합니까?
단계별 방법
- 1
작업 목록 작성
유형, 필드, 변경, 역할, 객체 소유자 및 민감한 데이터 목록을 작성합니다. 현재 클라이언트 쿼리와 거의 사용되지 않는 경로를 포함합니다.
결과물: 작업, 역할, 객체 및 필드 매트릭스
- 2
각 접근 결정 테스트
중첩 객체를 포함하여 서로 다른 테스트 계정을 생성하고 객체 ID를 교환합니다. 리졸버는 데이터를 반환하기 전에 권한 부여를 적용해야 합니다.
결과물: 재현 가능한 허용 및 거부 사례
- 3
바운드 서버 작업
필드 및 컬렉션의 실제 비용을 측정합니다. 깊이, 범위, 별칭, 페이지네이션, 배치 처리 및 시간을 함께 테스트한 후 적절한 제한을 설정합니다.
결과물: 비용 정책 및 공격자 쿼리 세트
- 4
불필요한 노출 감소
컨텍스트에 대한 인트로스펙션 여부를 결정하고, 내부 오류 세부 정보를 숨기고, 클라이언트에게 필요한 정보 이상을 노출하는 필드를 제거합니다.
결과물: 검토된 공개 구성 및 오류 응답
- 5
신중하게 관찰
비밀 및 민감한 인수를 제외하고 유용한 기술적 ID, 작업, 비용, 거부 및 상관 관계를 로깅합니다. 경고 담당자를 지정합니다.
결과물: 대시보드 및 조사 절차
- 6
변경 후 재현
필드, 역할 또는 클라이언트가 변경될 때 권한 부여 및 로드 케이스를 반복합니다. 수정된 그래프를 통과하는 이전 쿼리를 확인합니다.
결과물: 회귀 테스트 결과 및 릴리스 결정
관리 지표
| 지표 | 측정 대상 | 첫 번째 조치 |
|---|---|---|
| 접근 권한 | 객체 및 필드 관련 사례가 예상대로 거부됨 | 리졸버 수정 |
| 비용 | 정책에 의해 과도한 쿼리가 억제됨 | 필드 및 제한 조정 |
| 오류 | 내부 세부 정보 없이 공개 응답 제공 | 노출되는 세부 정보 감소 |
| 회귀 분석 | 변경 후 클라이언트 작업 재실행 | 의도치 않은 오류 차단 |
일반적인 실수
- 엔드포인트 접근만 신뢰
- 깊이 제한은 하지만 범위는 무시
- 중첩 필드 권한 부여 누락
- 민감한 데이터가 포함된 인수 로깅
자주 묻는 질문
GraphQL이 일반 API 권한 부여를 없애는가?
아니요. 모든 객체 및 필드 접근에는 여전히 ID 및 컨텍스트 기반 결정이 필요합니다.
인트로스펙션 비활성화로 충분한가?
아니요. 스키마 노출은 줄일 수 있지만 접근 또는 쿼리 비용을 해결하지는 못합니다.
깊이 제한으로 충분한가?
아니요. 별칭, 범위, 목록 및 필드별 비용도 중요합니다.
공식 참조
참조는 방법을 뒷받침합니다. 상황에 맞게 검사를 조정하십시오. 이는 인증이 아닙니다. 원본 참조 제목 및 소스 문서는 다른 언어로 작성되었을 수 있습니다.






