You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[ ]`Basic Auth`를 사용하지 말고 표준 인증방식을 사용하세요. (예로, JWT, OAuth 등)
11
11
-[ ]`인증`, `토큰 생성`, `패스워드 저장`은 직접 개발하지 말고 표준을 사용하세요.
12
+
-[ ] 로그인에서 `Max Retry`와 격리 기능을 사용하세요.
13
+
-[ ] 민감한 데이터는 암호화하세요.
12
14
13
15
### JWT (JSON Web Token)
14
16
-[ ] 무작위 대입 공격을 어렵게 하기 위해 랜덤하고 복잡한 키값 (`JWT Secret`)을 사용하세요.
15
17
-[ ] 요청 페이로드에서 알고리즘을 가져오지 마세요. 알고리즘은 백엔드에서 강제로 적용하세요. (`HS256` 혹은 `RS256`)
16
-
-[ ] 토큰 만료기간 (`TTL`, `RTTL`)은 되도록 짧게 설정하세요.
18
+
-[ ] 토큰 만료 기간 (`TTL`, `RTTL`)은 되도록 짧게 설정하세요.
17
19
-[ ] JWT 페이로드는 [디코딩이 쉽기](https://jwt.io/#debugger-io) 때문에 민감한 데이터는 저장하지 마세요.
18
20
19
21
### OAuth
20
-
-[ ] 허용된 URL만 받기 위해서는 서버단에서`redirect_uri`가 유효한지 항상 검증하세요.
21
-
-[ ] 토큰 대신 항상 코드를 주고 받으세요. (`respons_type=token`을 허용하지 마세요)
22
+
-[ ] 허용된 URL만 받기 위해서는 서버 단에서`redirect_uri`가 유효한지 항상 검증하세요.
23
+
-[ ] 토큰 대신 항상 코드를 주고받으세요. (`respons_type=token`을 허용하지 마세요)
22
24
-[ ] OAuth 인증 프로세스에서 CSRF를 방지하기 위해 랜덤 해쉬값을 가진 `state` 파라미터를 사용하세요.
23
25
-[ ] 디폴트 스코프를 정의하고 각 애플리케이션마다 스코프 파라미터의 유효성을 검증하세요.
24
26
25
27
## 접근 (Access)
26
-
-[ ] DDoS나 무작위 대입 공격을 피하려면 요청수를 제한하세요. (Throttling)
27
-
-[ ] MITM (중간자 공격)을 피하려면 서버단에서 HTTPS를 사용하세요.
28
+
-[ ] DDoS나 무작위 대입 공격을 피하려면 요청 수를 제한하세요. (Throttling)
29
+
-[ ] MITM (중간자 공격)을 피하려면 서버 단에서 HTTPS를 사용하세요.
28
30
-[ ] SSL Strip 공격을 피하려면 `HSTS` 헤더를 SSL과 함께 사용하세요.
29
31
30
32
## 입력 및 요청 (Input)
31
33
-[ ] 각 요청 연산에 맞는 적절한 HTTP 메서드를 사용하세요. `GET (읽기)`, `POST (생성)`, `PUT (대체/갱신)`, `DELETE (삭제)`
32
-
-[ ] 여러분이 지원하는 포맷 (예를 들어 `application/xml`이나 `application/json` 등)만을 허용하기 위해서는 요청의 Accept 헤더의 `content-type`을 검증하여 매칭되는게 없을 경우엔 `406 Not Acceptable`로 응답하세요.
33
-
-[ ]요청 받은 POST 데이터의 `content-type`을 검증하세요. (예를 들어 `application/x-www-form-urlencoded`나 `multipart/form-data` 또는 `application/json` 등)
34
+
-[ ] 여러분이 지원하는 포맷 (예를 들어 `application/xml`이나 `application/json` 등)만을 허용하기 위해서는 요청의 Accept 헤더의 `content-type`을 검증하여 매칭되는 게 없을 경우엔 `406 Not Acceptable`로 응답하세요.
35
+
-[ ]요청받은 POST 데이터의 `content-type`을 검증하세요. (예를 들어 `application/x-www-form-urlencoded`나 `multipart/form-data` 또는 `application/json` 등)
34
36
-[ ] 일반적인 취약점들을 피하기 위해선 사용자 입력의 유효성을 검증하세요. (예를 들어 `XSS`, `SQL-Injection` 또는 `Remote Code Execution` 등)
35
-
-[ ] URL에는 그 어떤 민감한 데이터 (`자격 인증 (crendentials)`, `패스워드`, `보안 토큰` 또는 `API 키`)도 포함하고 있어서는 안되며 이러한 것들은 표준 인증 방식의 헤더를 사용하세요.
37
+
-[ ] URL에는 그 어떤 민감한 데이터 (`자격 인증 (crendentials)`, `패스워드`, `보안 토큰` 또는 `API 키`)도 포함하고 있어서는 안 되며 이러한 것들은 표준 인증 방식의 헤더를 사용하세요.
38
+
-[ ] 캐싱과 속도 제한 정책을(예를 들어 `Quota`, `Spike Arrest`, `Concurrent Rate Limit`) 제공하는 API 게이트웨이 서비스를 사용하세요. 그리고 API 리소스를 동적으로 배포하세요.
36
39
37
40
## 서버 처리
38
41
-[ ] 잘못된 인증을 피하기 위해 모든 엔드포인트가 인증 프로세스 뒤에서 보호되고 있는지 확인하세요.
39
-
-[ ] 사용자의 리소스 식별자를 사용하는건 지양하세요. `/user/654321/orders` 대신 `/me/orders`를 사용하세요.
42
+
-[ ] 사용자의 리소스 식별자를 사용하는 건 지양하세요. `/user/654321/orders` 대신 `/me/orders`를 사용하세요.
40
43
-[ ] 자동 증가 (auto-increment) 식별자 대신 `UUID`를 사용하세요.
41
-
-[ ] XML 파일을 파싱하고 있다면, `XXE` (XML 외부 엔티티 공격, XML external entity attack)를 피하기 위해 엔티티 파싱을 비활성화 하세요.
42
-
-[ ] XML 파일을 파싱하고 있다면, 지수적 엔티티 확장 공격을 통한 빌리언 러프/XML 폭탄을 피하기 위해 엔티티 확장을 비활성화 하세요.
44
+
-[ ] XML 파일을 파싱하고 있다면, `XXE` (XML 외부 엔티티 공격, XML external entity attack)를 피하기 위해 엔티티 파싱을 비활성화하세요.
45
+
-[ ] XML 파일을 파싱하고 있다면, 지수적 엔티티 확장 공격을 통한 빌리언 러프/XML 폭탄을 피하기 위해 엔티티 확장을 비활성화하세요.
43
46
-[ ] 파일 업로드에는 CDN을 사용하세요.
44
47
-[ ] 거대한 양의 데이터를 다루고 있다면, HTTP 블로킹을 피하고 응답을 빠르게 반환하기 위해 워커나 큐를 사용하세요.
@@ -53,6 +56,11 @@ API를 설계하고 테스트하고 배포할 때 고려해야 할 중요한 보
53
56
-[ ]`자격 인증 (crendentials)`, `패스워드`, `보안 토큰`과 같은 민감한 데이터는 반환하지 마세요.
54
57
-[ ] 각 연산에 맞는 적절한 상태 코드를 반환하세요. (예를 들어 `200 OK`, `400 Bad Request`, `401 Unauthorized`, `405 Method Not Allowed` 등)
55
58
59
+
## CI & CD
60
+
-[ ] 단위/통합 테스트 범위로 설계 및 구현을 검토하세요.
61
+
-[ ] 코드 리뷰 절차를 사용하고 자체 승인을 무시하세요.
62
+
-[ ] 제품 출시전에 백신 소프트웨어로 공급 업체의 라이브러리 및 기타 종속적인 것을 포함한 서비스의 모든 구성 요소들을 정적으로 검사했는지 확인하세요.
63
+
-[ ] 배포에 대한 롤백 솔루션을 설계하세요.
56
64
57
65
---
58
66
@@ -62,5 +70,5 @@ API를 설계하고 테스트하고 배포할 때 고려해야 할 중요한 보
62
70
63
71
---
64
72
65
-
# 기여하는
66
-
Feel free to contribute by forking this repository, making some changes, and submitting pull requests. For any questions drop us an email at `team@shieldfy.io`.
73
+
# 기여하기
74
+
이 저장소를 분기, 변경, pull request를 보내는 것으로 자유롭게 기여하세요. 질문은 `team@shieldfy.io`로 이메일을 보내주세요.
0 commit comments