본문 바로가기

전체 글459

DB(데이터베이스) 환경 보안 체크리스트 취약점 유형❗ SQL Injection설명: 사용자 입력이 SQL 쿼리 문자열로 조작되어 DB를 탈취/삭제하는 공격방어전략:✅ JPA, MyBatis, QueryDSL 등에서 파라미터 바인딩 사용✅ 입력값 직접 SQL에 연결하지 않기✅ PreparedStatement 사용 필수✅ 입력값 escape는 보조 수단 (기본은 바인딩 처리)취약점 유형❗ 과도한 권한 설정설명: DB 사용자에게 모든 권한(ALL PRIVILEGES) 부여 시 데이터 유출/삭제 위험방어전략:✅ 사용자별 최소 권한 부여 (SELECT, INSERT 등 필요한 것만)✅ READ ONLY, READ WRITE 권한 분리✅ 운영/개발/테스트 환경별 계정 분리취약점 유형❗ 비밀번호 평문 저장설명: 사용자 비밀번호를 DB에 그대로 저장할 경우.. 2025. 4. 1.
보안 시스템 II 보안 시스템 II (침입탐지 시스템 IDS / 침입방지 시스템 IPS)01. 침입탐지 시스템 (IDS: Intrusion Detection System)🔹 개념네트워크나 시스템에서 비정상적인 행위나 공격 시도를 탐지하는 시스템탐지만 가능하며, 자동 차단은 ❌ (→ IPS와 차이)🔹 주요 기능사용자/시스템 행위 모니터링시스템 설정과 취약성에 대한 감사기록시스템 무결성 평가 (파일 변조 여부 등)알려진 공격 패턴(시그니처) 탐지통계 분석, 비정상 행위 감지🔹 구성 요소모니터링부센서 → 데이터 수집 (로그, 트래픽 등)분석 및 조치부(모니터링부에서) 수집된 데이터를 (가공, 축약) 분석 → 침입 여부 판단 후 알림 → 조치관리부정책 설정, 전체 IDS 시스템 제어🔹 IDS의 동작 방식별 분류응용 기반애.. 2025. 4. 1.
보안 시스템 I 01. 보안 시스템 개요보안 시스템이란?사이버 공격을 탐지하거나 차단하는 시스템주요 구성:침입차단시스템 (Firewall): 외부로부터 차단침입탐지시스템 (IDS): 공격 탐지침입방지시스템 (IPS): 탐지 + 차단가상사설망 (VPN): 외부에서도 안전한 내부망 사용네트워크 접근제어 시스템 (NAC): 인증 안 된 장치 차단02. 침입차단시스템 (방화벽, Firewall)개념외부에서 내부 네트워크로 접근하려는 불법 사용자나 위협 요소를 차단네트워크 경계에서 트래픽을 검사하고 통제함방화벽 구성 방식① 패킷 필터링 (Packet Filtering)OSI 3~4계층에서 동작 (IP, TCP/UDP 헤더 검사)IP 주소, 포트번호, 프로토콜 기반으로 통과 여부 판단장점속도가 매우 빠름 (단순 검사)사용자에게 투.. 2025. 4. 1.
배포 환경 보안 체크리스트 취약점 유형❗ HTTPS 미사용설명: HTTP는 모든 데이터가 평문으로 노출 → 로그인, 토큰, 개인정보 유출 가능방어전략:✅ Let’s Encrypt 등으로 무료 SSL 인증서 적용✅ Nginx에서 80 → 443 리디렉션 설정✅ Strict-Transport-Security 헤더 추가 (HSTS)취약점 유형❗ 쿠키 설정 미흡설명: 쿠키가 JS에서 접근 가능하거나 다른 도메인에서 전송되면 위험방어전략:✅ HttpOnly, Secure, SameSite=Strict 옵션 적용✅ 인증용 토큰은 HttpOnly 쿠키에만 저장✅ 서브도메인 간 쿠키 공유 시 SameSite=None + Secure 필요취약점 유형❗ 잘못된 CORS 설정설명: Access-Control-Allow-Origin: * + withC.. 2025. 4. 1.
Spring Boot 보안 체크리스트 취약점 유형❗ 인증 우회 (Authentication Bypass)설명: 인증 없이 보호된 API에 접근하는 공격방어전략:✅ Spring Security에서 .anyRequest().authenticated() 설정✅ @AuthenticationPrincipal로 로그인 사용자 정보 검증✅ 인증 예외 경로(/login, /signup)만 .permitAll() 처리취약점 유형❗ 권한 우회 (Authorization Bypass)설명: 일반 사용자가 관리자 기능 또는 다른 유저 데이터 접근방어전략:✅ @PreAuthorize("hasRole('ADMIN')") 또는 @Secured("ROLE_ADMIN")✅ 사용자 리소스 접근 시 if (userId != principalId) 검증✅ 모든 민감 API에 .. 2025. 4. 1.
React 보안 체크리스트 취약점 유형❗ XSS (Cross Site Scripting)설명: 사용자 입력을 DOM에 직접 렌더링하면 악성 스크립트가 실행될 수 있음방어전략:✅ dangerouslySetInnerHTML 지양 or DOMPurify 사용✅ 사용자 입력 escape✅ Content-Security-Policy(CSP) 설정취약점 유형❗ LocalStorage/SessionStorage에 민감정보 저장설명: JS로 접근 가능한 저장소 → XSS에 노출되면 토큰 탈취 가능방어전략:✅ accessToken은 React 메모리나 HttpOnly 쿠키에 저장❌ localStorage에 저장하지 않기취약점 유형❗ CSRF (Cross-Site Request Forgery)설명: 다른 사이트에서 요청을 보내도 브라우저가 쿠키를 .. 2025. 4. 1.
웹 개발자, 특히 풀스택 개발자라면 반드시 알고 있어야 할 사이버 공격 종류 웹 개발자, 특히 풀스택 개발자라면 반드시 알고 있어야 할 사이버 공격 종류보안은 “취약점을 막는 것”이 아니라 “공격당해도 피해를 최소화하는 것”1. XSS (Cross-Site Scripting)요약사용자의 브라우저에 악성 스크립트를 삽입사용자 쿠키/토큰 탈취, 리디렉션, 키로깅 등 가능예시방어dangerouslySetInnerHTML 지양입력값 escapeContent-Security-Policy 설정DOMPurify, xss 필터 사용XSS 방어 4대 수칙1. CSP (Content-Security-Policy) 설정브라우저에게 **"어디서 로드한 스크립트만 실행해!"**라고 알려주는 보안 헤더적용 방법 (예: Vite + Nginx + Netlify 등)(1) index.html 안에 추가:(.. 2025. 4. 1.
AWS에서 자주 쓰는 서비스 AWS에서 자주 쓰는 핵심 서비스 10선언제 사용하면 좋은가EC2가상 서버 (Linux, Windows)Spring, Node, Django 백엔드 직접 배포하고 싶을 때S3파일 저장소 (이미지, PDF 등)이미지 업로드, 정적 웹사이트 호스팅Lambda서버리스 함수 실행트래픽 적고 이벤트 기반 동작 (예: 이미지 리사이즈, 슬랙 알림)RDS관리형 관계형 DB (MySQL, PostgreSQL 등)JPA나 JDBC로 DB 연결할 때DynamoDBNoSQL DB실시간 분석, 캐시성 데이터, 유연한 스키마CloudFrontCDN전 세계 빠른 정적 파일 전송 (S3 + CloudFront 조합 많이 씀)API GatewayAPI 엔드포인트 제공Lambda + API 서버 구성할 때IAM사용자 & 권한 관리서비.. 2025. 3. 31.
Swagger와 API 명세 1. Swagger / OpenAPI (가장 많이 사용됨)Swagger란?API 명세를 자동 생성해주는 도구OpenAPI 스펙을 바탕으로 UI를 통해 확인하고 테스트 가능Spring Boot 연동 방법implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'// http://localhost:8080/swagger-ui/index.html 에서 확인 가능장점자동 문서화컨트롤러, DTO에 붙인 @Operation, @Parameter 등으로 자동 생성UI 제공Swagger UI에서 API 직접 테스트 가능OpenAPI 3.0 스펙 지원다른 툴과 연동 쉬움 (Postman, Notion 등)예시@Operation(summary = "회원.. 2025. 3. 31.
Spring Boot Test 관련 (JUnit, Mockito, AssertJ,Spring Boot Test, Testcontainers ) 1. JUnit (Java Unit Test의 표준)버전JUnit 4, 5(Jupiter) 두 가지가 존재 (요즘은 5 주력)용도단위 테스트, 통합 테스트 등 Java 테스트 전반대표 어노테이션@Test, @BeforeEach, @AfterEach, @Nested, @DisplayName 등예시 (JUnit 5)@DisplayName("간단한 더하기 테스트")@Testvoid addTest() { int sum = calculator.add(2, 3); assertEquals(5, sum);}2. Mockito (Mock 객체 생성)가짜 객체(Mock) 만들어서 서비스, 컨트롤러 단위 테스트할 때 사용DB, 외부 API 없이도 테스트 가능@Mock, @InjectMocks, when().the.. 2025. 3. 31.
Optional<T> 1. Optional이란?null을 직접 다루지 않고,"값이 있을 수도, 없을 수도 있는 객체"를 감싸는 컨테이너 클래스Optional은 null-safe한 값을 표현하는 도구리턴 타입에 사용하되, 파라미터/필드에는 되도록 쓰지 말기orElseThrow, map, filter, ifPresent 잘 쓰면 코드 깔끔해짐Optional name = Optional.of("Mars");Optional empty = Optional.empty();2. 왜 쓰는가?NullPointerException 방지"null 체크"를 명시적으로 강제리턴값이 "있을 수도/없을 수도" 있는 경우 문서화 효과예전 방식User user = repository.findByEmail(email);if (user != null) { ... 2025. 3. 31.
JPQL과 QueryDSL 1. QueryDSL이란?JPA의 JPQL을 타입 안전하게 사용할 수 있게 도와주는 라이브러리IDE 자동완성, 리팩토링 용이, 동적 쿼리에 매우 강력함실무에선 JPQL보다 거의 대부분 QueryDSL을 사용2. 설치 방법 (Gradle 기준)1) 의존성 추가// build.gradle.kts (Kotlin DSL 예시)dependencies { implementation("com.querydsl:querydsl-jpa") annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jpa") annotationProcessor("jakarta.annotation:jakarta.annotation-api") annotationProcessor("jak.. 2025. 3. 31.