"@RequestMapping" 의 변형된 어노테이션을 사용하는 것이 더 선호됩니다.
스프링 프레임워크 4.3 버전에서는 어노테이션된 메소드의 의미를 더 잘 나타내기 위해 @RequestMapping 의 변형된 어노테이션들을 도입했습니다.
@GetMapping, @PostMapping, @PutMapping 그리고 @DeleteMapping 를 사용하는 것이 @RequestMapping(method = RequestMethod.XYZ) 를 사용하는 것 보다 더 선호됩니다.
규칙을 어긴 코드
@RequestMapping(path = "/greeting", method = RequestMethod.GET) // 규칙을 어긴 코드
public Greeting greeting(@RequestParam(...
"secure" 플래그 없이 쿠키를 생성하는 것은 보안에 취약할 수 있습니다.
쿠키의 secure 속성이 true 로 설정되어 보호되면, 브라우저는 암호화되지 않은 HTTP 요청에 쿠키를 보내지 않으므로 중간자 공격(man-in-the-middle attack) 중에 권한이 없는 사용자가 쿠키를 확인할 수 없습니다.
스스로에게 물어보십시오
쿠키가 HTTPS 요청이 아닌 통신을 통해 전송되도록 설계되지 않았습니다.
웹사이트에 mixed content 가 포함되어 있는지 여부가 확실하지 않습니다.(즉, 모든 곳에서 HTTPS 를 사용하는지 확실하지 않습니다.)
이러한 상황에 해당되는 경우, 위험할 수 있습니다.
추천되는 안전한 코딩 관습
모든 곳에서 HTTPS 를 사용하...
디버그 기능이 활성화 된 채로 프로덕션에 코드를 제공하는 것은 보안에 민감할 수 있습니다.
디버그 기능이 활성화된 프로덕션에서 코드를 제공하는 것은 보안에 민감합니다. 과거에는 다음과 같은 취약점이 있었습니다:
CVE-2018-1999007
CVE-2015-5306
CVE-2013-2006
애플리케이션의 디버그 기능은 개발자들이 버그를 쉽게 찾을 수 있게 하지만 공격자들의 작업 또한 용이하게 만듭니다. 종종 디버그 기능은 애플리케이션이 실행되는 시스템과 유저에 대한 더 자세한 정보를 제공하기도 합니다.
스스로에게 자문하세요
디버그 기능을 활성화하는 코드 혹은 설정파일이 프로덕션 서버 혹은 최종 사용자에게 배포됩니다.
애플리케이션이 기본적으로 디버그 기능이 활성화 된 채로 실...
안전한 HTTP 메소드와 안전하지 않은 HTTP 메소드를 모두 허용하는 것은 보안에 민감할 수 있습니다.
HTTP 메소드는 정보 검색과 같은 read-only 작업을 수행하는 데에 사용될 때 안전합니다. 반대로, 안전하지 않은 HTTP 메소드는 웹 사이트의 유저의 프로필을 변경하는 것과 같은 애플리케이션의 상태를 변경하는 데에 사용됩니다.
일반적으로 안전한 HTTP 메소드는 GET, HEAD, OPTIONS 입니다.
일반적으로 안전하지 않은 HTTP 메소드는 POST, PUT, DELETE 입니다.
안전한 HTTP 메서드와 안전하지 않은 HTTP 메서드가 모두 웹 애플리케이션에서 특정 작업을 수행하도록 허용하면 보안에 영향을 미칠 수 있습니다. 예를들어 CSRF 보호는 안전하지 않은 HTTP 메소드에 의해 수행되...
유틸리티 클래스들은 public 생성자를 갖고 있어선 안됩니다.
static 멤버의 집합인 유틸리티 클래스들은 인스턴스화 될 일이 없습니다.
혹시라도 추상 유틸리티 클래스일지라도, 생성자가 public 이어야할 이유가 없습니다.
자바는 기본적으로 생성자가 하나라도 정의된 게 없을 경우, 암묵적인 public 기본 새성자를 생성합니다.
따라서 private 생성자를 선언할 필요가 있습니다.
규칙을 어긴 코드
class StringUtils { // 규칙을 어긴 코드
public static String concatenate(String s1, String s2) {
return s1 + s2;
}
}
규칙을 준수한 해결책
코드가 1줄인 if 체인의 블...
상속의 깊이가 너무 깊어선 안됩니다.
상속은 확실히 객체 지향 프로그래밍에서 가장 가치 있는 개념 중 하나입니다.
상속이란 이전에 생성된 클래스를 기반으로 속성과 동작의 컬렉션을 만들어, 코드를 구획화하고 재사용하는 방법중 하나입니다.
그러나 너무 깊은 상속 트리를 만들어, 이 개념을 남용하면 매우 복잡하고 유지 관리할 수 없는 코드가 나올 수 있습니다.
대부분의 경우 상속 트리가 너무 깊은 이유는 컴포지션을 사용하는게 더 합리적일 때, 상속을 사용하려 했기 때문에 발생합니다.
이 규칙은 Object부터 시작하는 상속 트리의 깊이를 파악하여 허용되는 값보다 커질 때 알림을 울립니다.
이 규칙은 파라미터를 어떻게 입력하냐에 따라, 이 규칙의 적용 범...
허용적인 CORS 정책을 가지는것은 보안에 민감할 수 있습니다.
허용적인 CORS 정책을 갖는 것은 보안에 민감합니다. 과거에는 다음과 같은 취약점이 있었습니다.
CVE-2018-0269
CVE-2017-14460
브라우저의 동일 출처 정책 은 기본적으로, 또 보안상의 이유로 자바스크립트 프론트엔드가
출처가 다른(도메인, 프로토콜, 포트) 리소스에 대한 교차 출처 HTTP 요청을 수행하는 것을 방지합니다. 요청된 대상은 CORS 라고 불리는 추가적인 HTTP 헤더를 Response 에 추가할 수 있고,
이 헤더는 브라우저의 접근 제어 정책을 변경하거나 동일 출처 정책을 완화하는 지시어 역할을 합니다.
스스로에게 자문하세요
지정된 원본을 신뢰하지 않음(예시...
"@RequestMapping" 메소드는 "private" 일 수 없습니다.
@Controller 어노테이션이 달린 클래스의(메타 어노테이션을 통해 직접 또는 간접적으로 - Spring Boot의 @RestController와 같이) @RequestMapping 주석 부분이 있는 메서드는 일치하는 웹 요청을 처리하기 위해 호출됩니다.
스프링은 가시성을 확인하지 않고 리플렉션을 통해 이러한 메서드를 호출하기 때문에 메서드가 private 인 경우에도 메소드는 호출됩니다.
따라서, 민감한 메소드를 private 로 선언하는 것이 그러한 코드가 호출되는 것을 제어하는 좋은 방법처럼 보일 수 있습니다. 하지만 불행하게도, 모든 스프링 프레임워크가 이러한 방식으로 가시성을 무시하는 것은 아닙니다....
전체 글 239개, 30 페이지