목록Server (11)
IT 성장일기

maxParameterCountTomcat을 사용하는 경우 server.xml 파일 내 Connector 태그에서 확인할 수 있는 이 속성은 HTTP 요청에서 허용되는 최대 매개변수 개수를 지정하는 데 사용됩니다. 이 속성은 보안상의 이유로 설정되곤 하는데, 매우 큰 값으로 설정할 경우 서비스 거부(DoS) 공격에 취약해질 수도 있다고 합니다. 문제가 뭐였는데요?고객사 서버 상에서 솔루션 데이터 세팅을 위해 웹애플리케이션 사용 중 HTTP 요청이 막히는 문제가 있었습니다. 소스나 데이터베이스 상에서는 아무런 문제가 없었고 애플리케이션 로그에도 아무런 기록이 남지 않았으며 브라우저 console에서도 아무 기록을 확인할 수가 없었습니다. 가장 끔찍한 현실은 소스와 데이터베이스를 회사 로컬 PC에 그대로 ..

윈도우 서비스 등록 중 Failed to grant service user 오류 해결하기명령 프롬프트를 이용해 윈도우에 톰캣 서비스를 등록하다가 아래와 같은 오류가 발생했습니다.Failed to grant service user 'NT AUTHORITY\LocalService' write permission to log path [] due to error '19: 쓰기 방지된 미디어입니다.'윈도우 서비스 목록을 확인해보면 아래 왼쪽 사진처럼 아무 정보도 없이 Apache라는 껍데기 서비스만 등록되어있습니다.오른쪽은 서비스에 정상적으로 등록된 톰캣입니다. 해결 방법윈도우 서비스 등록을 하기 위해서는 Tomcat 하위 bin 폴더에 위치해있는 service.bat 파일의 수정이 필요합니다.실제로 등록되는 ..

Tomcat 전용 SSL 인증서인 JKS 파일 만들고 정보 확인하기 웹과 관련된 작업을 하다 보면 웹 보안 관련해서 SSL 인증서라는 것을 접하게 됩니다. SSL 인증서는 HTTP에 보안이 적용된 HTTPS 통신을 하기 위해 필수적인 요소인데요, 어떤 WAS(Web Application Server)를 사용하느냐에 따라 사용되는 인증서의 형식이나 종류가 다릅니다. JKS(Java Key store) 파일 만들기 OS는 Linux, WAS는 Tomcat입니다. 사용하는 애플리케이션은 Java로 개발되어 있어서 OS에 Java가 설치되어 있습니다. 준비된 파일로써 chainca.crt, myDomain.crt, myDomain.key 이 세 가지 파일이 존재한다고 가정합니다. 1. 키 저장소 파일 만들기 가..

암호화 알고리즘 사용 제한하기 근데 이게 다 뭐람?😥 이번에 요청받았던 TLS 버전 제한 외에도 취약한 암호화 알고리즘에 대하여도 조치를 해달라는 요청이 있었습니다. 마찬가지로 너무 생소한 친구들이었기 때문에 경험을 넓힐 좋은 기회라고 여겨졌습니다. 빨간 박스 안에 있는 애들 안보이게 해주세요. 암호화 알고리즘은 뭔가요? 암호화 알고리즘은 데이터를 암호화하거나 복호화하는 데 사용되는 수학적인 방법과 규칙의 집합입니다. 크게 대칭키 암호화 알고리즘과 비대칭키 암호화 알고리즘으로 나뉘는데 이 부분에 대해서는 따로 공부해보도록 하겠습니다. 암호화 알고리즘은 데이터의 보안과 안전성을 유지하는데 중요한 역할을 하기 때문에 끊임없이 발전하고 변화합니다. 따라서 성능이 비교적 뒤쳐지는 암호화 알고리즘을 사용 배제하는..

TLS 버전 제한하기 요즘 들어 부쩍 웹 취약점과 웹 보안 관련된 업무를 할 기회가 많아진 것 같습니다. 고객사에서 취약한 암호화 프로토콜인 TLS1 버전과 TLS1.1 버전의 사용을 제한하도록 설정해 달라는 요청이 와서 이 부분에 관해 새롭게 많은 것을 공부할 기회가 있었습니다. TLS가 뭐예요? HTTP + TLS/SSL = HTTPS 전송계층보안 (Transport Layer Security)의 약자로 웹 서버와 클라이언트 간의 보안 통신을 제공하는 프로토콜입니다. 기존 코드 Connector 태그 내부에 SSL관련 프로퍼티가 선언되어 있는 형식이었습니다. Connector 태그는 톰캣을 사용하면서 수도 없이 접해봤었는데, SSL과 관련된 8443 포트가 설정된 태그를 주의 깊게 본 것은 이번이 처..

설정한 에러 페이지가 아닌 기본 에러 페이지가 나타날 때 (with Error Code 400) 웹 서버에서 반환하는 에러 메시지를 클라이언트 측에 노출하게 된다면 보안상의 약점이 노출 될 여지가 생기기 때문에 웹 애플리케이션을 제작할 때는 보통 웹 에러 코드에 따른 에러페이지를 제작하고 web.xml 파일에 이를 설정합니다. 하지만 Tomcat을 사용하는 경우, 식별된 바로는 8.5 이상의 버전에서 URL에 퍼센트 기호('%') 또는 대괄호 기호('[', ']') 가 포함되는 경우 미리 설정해둔 Custom Error Page가 아닌 Tomcat Default Error Page가 표시되는 이슈가 발견되었습니다. (예를 들면 localhost:8080/% 또는 localhost:8080/[ 등) 저는 ..

Default Error Page에서 톰캣 버전 정보 감추기 웹 사이트에서 에러나 잘못된 요청을 처리할 때 클라이언트로 에러 관련 정보를 전달하기 위해 따로 Error Page를 설정해주는 것이 일반적입니다. 하지만 Errpr Page가 아직 설정되지 않은 경우, 또는 (제가 지금 겪고 있는 것 처럼...) 설정한 Error Page가 잘 작동하지 않는 경우 웹 어플리케이션 서버의 정보를 표시하게 되어 보안의 취약점이 될 수 있습니다. 그래서 해결 방법이 있을 것 아니예요 톰캣 서버 설정 파일에 간단한 코드를 추가하여 임시조치를 취할 수 있습니다. /Tomcat > /conf > server.xml 태그 사이에 코드를 입력하고 톰캣 서버를 재시작해주면 아래와 같이 톰캣 서버 정보가 표시되지 않게 됩니다...

사용 중인 웹 서버 포트 터미널에서 강제로 닫기 분명 모든 톰캣 서버를 셧다운 했는데 어딘가에서 8080번 포트를 사용 중인 것 같은 현상이 발생했습니다. Window 커맨드를 이용하여 포트를 강제로 닫아보았습니다. 1. 윈도우 키를 눌러 CMD를 입력하고 관리자 권한으로 실행합니다. 2. 아래 코드를 입력합니다. 저는 8080번 포트를 사용했기 때문에 8080을 입력했습니다. 가운데 1자 막대기는 백스페이스 아래 "Shift + ₩"를 입력하면 됩니다. netstat -ano | findstr :8080 아래처럼 해당 포트의 상태가 나열됩니다. 이 때 가장 오른쪽의 5360번이 PID입니다. 3. PID를 알아냈으니 아래 코드를 입력해줍니다. 포트번호와 마찬가지로 PID는 사용자마다 다를 수 있습니다...

세션 아이디 설정하기세션 아이디는 웹 어플리케이션이 사용자를 추적하고 인증상태를 유지하기 위해 사용되는 고유식별자입니다.대부분의 웹 어플리케이션에서는 기본적으로 JSESSIONID 라는 세션 아이디를 사용합니다. 세션아이디를 따로 설정하는 이유기본 세션 아이디를 그대로 사용할 경우 몇가지 문제점이 생길 수 있습니다. 보안상 취약점이 생겨 세션 하이재킹(Session Hijacking) 공격 등에 노출될 수 있습니다.하나의 도메인에서 포트만 달리 하여 여러 개의 웹 사이트를 띄워놓을 때 쿠키에 저장된 세션 아이디가 충돌하여 하나의 사이트로 인식되는 경우가 생깁니다. 이럴 경우 로그인이 풀리게 됩니다.이러한 문제들을 해결하기 위해 세션 아이디를 다르게 설정하는 것이 권장됩니다. 세션 아이디 설정세션 ..

Node.js로 웹사이트 구축하고 꾸미기 앞서 튜토리얼을 따라 Node.js를 이용해 모듈과 패키지를 꾸리고 서버를 구성해 웹페이지를 띄우는 것까지 진행했습니다. [Node.js] Node.js로 웹서버 구축하기 Node.js로 웹서버 구축하기 문득 만들어보고 싶은 웹어플리케이션이 생겨서 유튜브를 찾아 Node.js를 설치하고 초기설정 튜토리얼을 따라해봤습니다. 페이지가 많지 않고 경량급으로 구성할것이기 februaryfairys.tistory.com 이어서 웹페이지를 꾸미고 발전시키는 튜토리얼을 진행해봤습니다. 먼저 npm을 통해 dotenv라는 패키지를 설치했습니다. dotenv는 환경변수를 관리해주는 라이브러리라고 합니다. 포트번호 등 보안에 문제가 될 수 있는 코드를 변수로 처리해 일괄적으로 관리..

Node.js로 웹서버 구축하기 문득 만들어보고 싶은 웹어플리케이션이 생겨서 유튜브를 찾아 Node.js를 설치하고 초기설정 튜토리얼을 따라해봤습니다. 페이지가 많지 않고 경량급으로 구성할것이기도 하고 프론트에서 주류로 사용되는 기술 스택들도 공부해보고 싶어서 웹사이트 구축 베이스로 스프링이 아닌 Node.js를 선택했습니다. 먼저 CMD를 열고 웹페이지 파일들이 위치할 디렉토리로 들어가 node init 명령어를 실행했습니다. json파일로 이루어진 패키지가 생성되었습니다. 다음으로 튜토리얼을 따라 터미널에 명령어를 입력하고 pug와 nodemon babel이라는 것들을 인스톨했습니다. 설치가 완료되자 패키지가 업데이트 되었습니다. 인스톨 할 때 붙였던 -D 명령어는 해당 개발환경에만 인스톨 되게 하라..