사용자가 현재 AWS WAF 구성 규칙을 차단하지 않고도 특정 파일 확장자를 사용하여 파일을 업로드할 수 있도록 허용하고 싶습니다.
간략한 설명
HTTP 파일 업로드 콘텐츠는 일반적으로 다음 유형 중 하나입니다.
- Form-data: 멀티파트 양식 데이터의 일부로 웹 사이트 양식에서 API로 전송되는 데이터.
- Binary-data: 텍스트 페이로드가 아닌 다른 파일. 바이너리 파일은 JPEG 파일, GZip 파일 또는 PDF 파일일 수 있습니다.
AWS WAF가 POST 요청을 차단하는 이유를 알아보려면 파일 업로드를 차단하는 일반적인 규칙을 검토합니다. 일반적인 규칙이 업로드를 차단하지 않는 경우 차단된 파일을 허용하기 위한 추가 옵션을 검토합니다.
다음 규칙은 일반적으로 파일 업로드를 차단합니다.
- CrossSiteScripting_BODY
- SQLi_BODY
- SizeRestrictions_BODY
- 요청 BODY를 평가하는 사용자 지정 규칙
해결 방법
파일 업로드를 차단하는 규칙 결정
파일 업로드를 차단하는 규칙을 확인하려면 다음 단계를 완료합니다.
1. AWS WAF 콘솔을 엽니다.
2. 샘플링된 웹 요청을 검토합니다. 샘플링된 요청에는 요청을 차단하는 규칙에 대한 정보와 HTTP 요청 구성 요소가 모두 포함됩니다.
3. 개요 페이지의 규칙 그룹 내 규칙에서 HTTP 요청 구성 요소를 찾습니다. 구성 요소는 다음 예와 비슷합니다.
**규칙 그룹 내 규칙 **
awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body
요청
`POST /upload`
`User-Agent: PostmanRuntime/7.30.0 Accept: */* Host: example.amazonaws.com Connection: keep-alive Content-Type: multipart/form-data; boundary=--------------------------421232031360350156757252 Content-Length: 4060737 `
4. terminatingRuleMatchDetails에 대한 AWS WAF 종합 로그를 검토합니다.
참고: terminatingRuleMatchDetails 필드는 SQLi_BODY 및 CrossSiteScripting_BODY 공격에 대해서만 채워집니다.
POST 데이터의 콘텐츠 유형 식별
콘텐츠 유형을 식별하려면 content-type에 대한 POST 데이터의 HTTP 헤더를 검토합니다. 이전 예에서 콘텐츠 유형은 multipart/form-data입니다.
Form-data 콘텐츠
헤더 값에 대한 multipart/form-data가 있는 form-data 콘텐츠의 경우 다음 단계를 완료합니다.
1. AWS WAF 콘솔을 엽니다.
2. 탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.
참고: 리전의 기본 선택은 **미국 동부(버지니아 북부)**입니다. 웹 ACL을 생성한 AWS 리전을 선택합니다. 웹 ACL이 Amazon CloudFront용으로 설정되어 있는 경우 글로벌을 선택합니다.
3. 웹 ACL을 선택합니다.
4. 규칙 탭에서 규칙 추가를 선택한 다음 내 규칙 및 규칙 그룹 추가를 선택합니다.
5. 규칙 추가 화면의 규칙 유형에서 규칙 빌더를 선택합니다.
이름에 이 규칙을 식별하는 이름을 입력합니다.
유형에서 일반 규칙을 선택합니다.
요청인 경우에서 문과 일치를 선택합니다.
검사에서 본문을 선택합니다.
콘텐츠 유형에서 JSON을 선택합니다.
JSON 일치 범위에서 값을 선택합니다.
요청 본문의 JSON이 올바르지 않은 경우 AWS WAF가 요청을 처리하는 방법에서 사용자에게 적합한 옵션을 선택합니다.
검사할 콘텐츠에서 전체 JSON 콘텐츠를 선택합니다.
일치 유형에서 정규식 일치를 선택합니다.
정규식에서 다음 샘플 정규식 패턴을 붙여 넣습니다.
(?:.pdf|.doc|.docx|.ppt)
(선택 사항) 텍스트 변환에서 텍스트 변형 또는 없음을 선택합니다. 자세한 내용은 텍스트 변환을 참조하세요.
오버사이즈 처리에서 해당 구성에 적합한 옵션을 선택합니다. 자세한 내용은 AWS WAF에서 오버사이즈 웹 요청 구성 요소 처리를 참조하세요.
동작에서 허용을 선택합니다. 자세한 내용은 규칙 동작을 참조하세요.
6. 규칙 추가를 선택합니다.
7. 규칙 우선 순위 설정의 경우 규칙을 선택하고 요청을 차단하는 규칙보다 높은 우선 순위로 이동합니다. AWS WAF는 설정된 우선 순위에 따라 규칙을 평가합니다. 자세한 내용은 웹 ACL의 규칙 및 규칙 그룹 처리 순서를 참조하세요.
8. 저장을 선택합니다. 규칙이 예상대로 작동하는지 확인합니다.
Binary-data 콘텐츠
헤더 값에 대해 application/pdf 또는 application/ppt와 비슷한 값을 가진 binary-data 콘텐츠의 경우 다음 단계를 완료합니다.
1. AWS WAF 콘솔을 엽니다.
2. 탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.
참고: 리전의 기본 선택은 **미국 동부(버지니아 북부)**입니다. 웹 ACL을 생성한 AWS 리전을 선택합니다. 웹 ACL이 Amazon CloudFront용으로 설정되어 있는 경우 글로벌을 선택합니다.
3. 웹 ACL을 선택합니다.
4. 규칙 탭에서 규칙 추가를 선택한 다음 내 규칙 및 규칙 그룹 추가를 선택합니다.
5. 규칙 추가 화면의 규칙 유형에서 규칙 빌더를 선택합니다.
이름에 규칙을 식별하는 이름을 입력합니다.
유형에서 일반 규칙을 선택합니다.
요청인 경우에서 문과 일치를 선택합니다.
검사에서 단일 헤더를 선택합니다.
헤더 필드 이름에 Content-Type을 입력합니다.
일치 유형에서 정규식 일치를 선택합니다.
정규식에서 다음 샘플 정규식 패턴을 붙여 넣습니다.
(?:pdf|jpeg)
(선택 사항) 텍스트 변환에서 텍스트 변형 또는 없음을 선택합니다. 자세한 내용은 텍스트 변환을 참조하세요.
동작에서 허용을 선택합니다. 자세한 내용은 규칙 동작을 참조하세요.
6. 규칙 추가를 선택합니다.
7. 규칙 우선 순위 설정의 경우 규칙을 선택하고 요청을 차단하는 규칙보다 높은 우선 순위로 이동합니다. AWS WAF는 설정된 우선 순위에 따라 규칙을 평가합니다. 자세한 내용은 웹 ACL의 규칙 및 규칙 그룹 처리 순서를 참조하세요.
8. 저장을 선택합니다. 규칙이 예상대로 작동하는지 확인합니다.
참고: 특정 업로드 URI 경로에 대한 규칙을 제한하려면 웹 ACL 규칙 내에서 AND 문을 사용하세요.
관련 정보
AWS WAF 로깅을 켜고 CloudWatch, Amazon S3 또는 Kinesis Data Firehose로 로그를 보내려면 어떻게 해야 하나요?