SSL/TLS 연결 중에 서버 인증서를 확인해야 합니다.

URL 매개변수와 같이 사용자가 제공한 데이터는 항상 신뢰할 수 없고 오염된 것으로 간주해야 합니다. 오염된 데이터에서 직접 쿠키를 생성하면 공격자가 세션 식별자를 알려진 값으로 설정할 수 있으므로 공격자는 피해자와 세션을 공유할 수 있습니다. 공격이 성공하면 피해자가 인증할 때 세션 식별자가 재생성되지 않는 등 민감한 정보에 대한 무단 액세스가 발생할 수 있습니다. 일반적으로 이러한 유형의 공격을 방지하는 해결책은 허용 목록으로 영향을 받을 수 있는 쿠키를 제한하는 것입니다. 규칙을 어긴 코드 from django.http import HttpResponse def index(request): v...

더보기

LDAP 연결은 인증되어야 합니다.

LDAP 클라이언트는 간단한 인증 방법을 제공하는 ‘바인드 요청’을 통해 LDAP 서버에 인증합니다. LDAP의 간편 인증은 세 가지 메커니즘으로 사용할 수 있습니다: 길이가 0인 사용자 이름 및 비밀번호 값으로 바인드 요청을 수행하는 익명 인증 메커니즘. 길이가 0인 비밀번호 값으로 바인드 요청을 수행하여 인증되지 않은 인증 메커니즘. 길이가 0이 아닌 비밀번호 값으로 바인드 요청을 수행하여 이름/비밀번호 인증 메커니즘. 익명 바인드와 인증되지 않은 바인드는 비밀번호를 제공하지 않고도 LDAP 디렉터리의 정보에 액세스할 수 있으므로 사용을 권장하지 않습니다. 규칙을 어긴 코드 import l...

더보기

암호화 키 생성은 강력한 매개 변수를 기반으로 해야 합니다.

암호화 키(또는 키 쌍)를 생성할 때는 강력한 매개변수를 사용하는 것이 중요합니다. 예를 들어 키 길이는 무차별 암호 대입 공격에 대해 충분한 엔트로피를 제공해야 합니다. RSA 및 DSA 알고리즘의 경우 키 크기는 2048비트 이상이어야 합니다. ECC(타원 곡선 암호화) 알고리즘의 경우 키 크기는 224비트 이상이어야 합니다. RSA 공개 키의 경우 공개 키 지수는 65537 이상이어야 합니다. 이 규칙은 약한 매개변수를 사용하여 RSA, DSA 또는 ECC 키 쌍 생성기를 초기화할 때 문제가 발생합니다. 다음 라이브러리를 지원합니다: cryptography PyCrypto Cr...

더보기

취약한 SSL/TLS 프로토콜을 사용해서는 안 됩니다.

이 규칙은 안전하지 않은 TLS 프로토콜 버전(“TLSv1.2”, “TLSv1.3”, “DTLSv1.2” 또는 “DTLSv1.3”과 다른 프로토콜)이 사용되거나 허용될 때 문제를 제기합니다. 최소 프로토콜 버전으로 TLS 1.2를 적용하고 TLS 1.0과 같은 이전 버전은 허용하지 않는 것이 좋습니다. 그렇게 하지 않으면 다운그레이드 공격에 노출될 수 있습니다. 연결을 가로챌 수 있는 악의적인 공격자가 요청된 프로토콜 버전을 수정하여 보안이 낮은 버전으로 다운그레이드할 수 있습니다. 대부분의 경우 기본 시스템 구성을 사용하는 것은 규정을 준수하지 않습니다. 실제로 애플리케이션이 다양한 구성을 가진 다양한 시...

더보기

암호 블록 체인 IV는 예측할 수 없어야 합니다.

암호 블록 체인(CBC) 모드로 데이터를 암호화할 때 초기화 벡터(IV)를 사용하여 암호화를 무작위로 생성합니다. 즉, 주어진 키 아래에서 동일한 평문이 항상 동일한 암호문을 생성하지는 않습니다. IV는 비밀일 필요는 없지만 ‘선택된 일반 텍스트 공격’을 피하기 위해 예측할 수 없어야 합니다. 초기화 벡터를 생성하려면 안전한 난수 생성기를 사용할 것을 NIST는 권장합니다. 규칙을 어긴 코드 PyCryptodome 모듈의 경우 from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto.Util.Padding impo...

더보기

정규식은 서비스 거부 공격에 취약하지 않아야 합니다.

대부분의 정규식 엔진은 입력을 평가할 때 백트래킹을 사용하여 정규식의 가능한 모든 실행 경로를 시도하는데, 경우에 따라 치명적인 백트래킹 상황이라고 하는 성능 문제를 일으킬 수 있습니다. 최악의 경우 정규식의 복잡성은 입력의 크기에 따라 기하급수적으로 증가하므로, 20자와 같이 신중하게 만들어진 작은 입력도 치명적인 백트래킹을 유발하여 애플리케이션의 서비스 거부를 일으킬 수 있습니다. 초선형 정규식의 복잡성은 신중하게 만들어진 큰 입력(수천 개의 문자)에서도 동일한 영향을 미칠 수 있습니다. 사용자 제어 입력에서 정규식 패턴을 구성하는 것은 권장하지 않으며, 다른 선택의 여지가 없는 경우 정규식 메타문자를...

더보기

Collection에 대한 반복은 Collection의 타입으로 수행되어야합니다.

해당 규칙은 ``Collection 항목에 대한 반복이 Collection` 타입의 상위 유형에서 수행되는 경우 문제를 제기합니다. 객체 또는 실제 객체와 Collections에 사이에 의존하는 것은 권장하지 않습니다. 언어에서 허용되는 동안, 해당 관행은 코드의 가독성을 떨어뜨리고 반복에서 올바른 유형을 사용하는 동안 항목을 더 명확하고 간단하게 작업할 수 있도록 Collection 항목이 메소드를 호출하도록 강제로 다운캐스트합니다. 규칙을 어긴 코드 public Collection<Person> getPersons() { ... } for (Object item : getPersons()) { ...

더보기