728x90

출처:https://helols.tistory.com/m/15

local이라 하면 일반적으로 서버를 의미하는 것이겠죠..
Local IP : <%=request.getLocalAddr()%>
Local Name : <%=request.getLocalName()%>
Local Port : <%=request.getLocalPort()%>

클라이언트의 정보입니다.
IP, Host, Port를 가져올 수 있습니다.
Remote IP : <%=request.getRemoteAddr()%>
Remote Host : <%=request.getRemoteHost()%>
Remote Port : <%=request.getRemotePort()%>

서버 이름과 포트가 있는데요.. 일반적으로 local 기본정보와 동일하겠죠..
Server Name : <%=request.getServerName()%>
Server Port : <%=request.getServerPort()%>

지역 정보입니다. 대부분 한국을 의미하는 ko가 나올 것 같네요..
Locale : <%=request.getLocale()%>

사용하는 프로토콜입니다. "프로토콜/메이저버전.마이너버전" 의 형태입니다.
Protocol : <%=request.getProtocol()%>

http, https, ftp와 같은 것을 의미합니다.
Scheme : <%=request.getScheme()%>

https와 같은 보안 채널의 사용 여부입니다. true/false 값으로 되어 있네요..
Secure Channel : <%=request.isSecure()%>

요청에 대한 URI, URL, 컨텍스트 경로, 서블릿 경로, GET/POST등의 메소드를 나타냅니다.
Request's URI : <%=request.getRequestURI()%>
Request's URL : <%=request.getRequestURL()%>
Context Path : <%=request.getContextPath()%>
Servlet Path : <%=request.getServletPath()%>
Method : <%=request.getMethod()%>

세션 ID에 대한 정보들입니다.
Session ID : <%=request.getRequestedSessionId()%>
Session ID from Cookie : <%=request.isRequestedSessionIdFromCookie()%>
Session ID from URL : <%=request.isRequestedSessionIdFromURL()%>
Session ID is still valid : <%=request.isRequestedSessionIdValid()%>

Header 정보를 보는 방법입니다.
<%
 Enumeration eHeader = request.getHeaderNames();
 while (eHeader.hasMoreElements()) {
  String hName = (String)eHeader.nextElement();
  String hValue = request.getHeader(hName);

  out.println(hName + " : " + hValue);
 }
%>

Request 객체를 통해서 쿠키 정보를 보는 방식이구요~
<%
 Cookie cookies[] = request.getCookies();
 for (int i=0; i < cookies.length; i++) {
  String name = cookies[i].getName();
  String value = cookies[i].getValue();

  out.println(name + " : " + value);
 }
%>

HTML 폼을 통해 넘어온 데이터를 받는 부분입니다.
<%
 Enumeration eParam = request.getParameterNames();
 while (eParam.hasMoreElements()) {
  String pName = (String)eParam.nextElement();
  String pValue = request.getParameter(pName);

  out.println(pName + " : " + pValue);
 }
%>

미리 설정한 attribute를 가져오는 부분이구요..
<%
 Enumeration eAttr = request.getAttributeNames();
 while (eAttr.hasMoreElements()) {
  String aName = (String)eAttr.nextElement();
  String aValue = request.getHeader(aName);

  out.println(aName + " : " + aValue);
 }
%>

728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

OutOfMemory 에 대한 고찰  (0) 2021.01.13
[JAVA]JVM GC관련 기본 옵션  (0) 2021.01.11
[JEUS]JEUS 7,8 WEBADMIN IP 접속 제한  (0) 2020.12.29
[WEBTOB/JEUS]cookie SameSite 이슈 (chrome 80)  (0) 2020.12.22
[JAVA]java agent??  (0) 2020.12.22
728x90

Server > adminServer 선택
Engine > Web Connections > ADMIN-HTTP 선택
고급선택사항 > Server Access Control 체크
> Allowed Server 에 허용할 IP기입

728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

[JAVA]JVM GC관련 기본 옵션  (0) 2021.01.11
[SEVLET] REQUEST 정보 파악  (0) 2020.12.29
[WEBTOB/JEUS]cookie SameSite 이슈 (chrome 80)  (0) 2020.12.22
[JAVA]java agent??  (0) 2020.12.22
[JAVA] BCI (Byte Code Instrumentation) ??  (0) 2020.12.22
728x90

출처: https://ifuwanna.tistory.com/223

크롬(Google Chrome)80버전부터 새로운 쿠키 정책이 적용 되어 Cookie의  SameSite 속성의 기본값이 "None"에서 "Lax"로 변경

■ 그로 인한 어떠한 영향도가 있는가??
SameSite 를 None 으로 설정할 경우 모든 도메인에서 쿠키를 전송하고 사용할 수 있지만  사용자가 사이트 간 요청 위조(CSRF - Cross-site request forgery) 및 의도하지 않은 정보 유출에 취약해질 가능성이 있음.
이러한 취약점을 방지하기 위해 지금까지는 별도의 SameSite 속성 명시 없이 쿠키를 생성했을 때 "SameSite=None" 으로 설정한 것과 동일하게 동작 했지만 Chrome80 버전 이후에는 SameSite 속성 설정이 없는 쿠키는 "SameSite=Lax" 로 명시한 것과 동일하게 동작
즉 iframe, ajax를 이용하여 다른 도메인으로부터 받은 쿠키를 저장하지 않게 됨

■ SameSite 란?
Cookie의 SameSite 속성은 서로 다른 도메인간의 쿠키 전송에 대한 보안을 설정.

"None"은 동일 사이트과 크로스 사이트에 모두 쿠키 전송이 가능. 그리고 "Strict"로 설정할 경우 서로 다른 도메인에서는 아예 전송이 불가능해 지기 때문에 CSRF를 100% 방지할 수 있으나 사용자 편의성을 많이 해치게 됩니다. 그래서 Strict 설정에 일부  예외( HTTP get method / a href / link href )를 두어 적용되는 설정이 이번에 기본값으로 변경되는 "Lax

■ 크롬이 SameSite 정책을 변경한 이유
브라우저에서 기본 설정을 변경한 것은 크로스 도메인간 중요한 정보 유지는 CSRF 가능성이 있는 쿠키가 아닌 다른 안전한 방식으로 하기를 권장하기 때문.
제안하는 대로 Lax 설정에서도 문제 없게끔 쿠키에 대한 의존성을 낮추는 것이 권장 되지만 바로 수정개발이 힘든 경우는 쿠키의 SameSite설정을 기존의 기본값이었던 None으로 설정하여 임시로 해결 할 수 있음.

■ 해결방안
1. WEBTOB patch
WebtoB-4.1.9.1-B308.50.18 로 패치

2. JEUS patch
버전별 패치파일 상이
JEUS6 : jext_v6008_i215676_a1340679.jar
JEUS7: jext_v7004_i214319_a1333430.jar
JEUS8: jext_v8000_i215340_a1339733.jar

3. JEUS설정 변경
버전별 설정파일 상이
JEUS6
- JEUSMain.xml 의 다음과 같은 내용 추가
<node><engine-container><command-option>-Djeus.servlet.response.cookie.sameSite=None
- WEBMain.xml 의 다음과 같은 내용 추가
<web-container><session-config><seasion-cookie><secure>true

JEUS7,8
Servers 메뉴 - MS선택 - Basic탭 - Basic Info 탭 이동
[Lock&Edit] 버튼 클릭 - Jvm Option 수정(-Djeus.servlet.response.cookie.sameSite=None) - 우측 상단 파란색 확인 버튼 클릭 - [Activate Changes] 버튼 클릭

Servers 메뉴 - MS선택 - Engine탭 - Web Engine 탭 - Session Config 탭 이동
[Lock&Edit] 버튼 클릭 - Secure 옵션 체크 - 우측 상단 파란색 확인 버튼 클릭 - [Activate Changes] 버튼 클릭


728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

[SEVLET] REQUEST 정보 파악  (0) 2020.12.29
[JEUS]JEUS 7,8 WEBADMIN IP 접속 제한  (0) 2020.12.29
[JAVA]java agent??  (0) 2020.12.22
[JAVA] BCI (Byte Code Instrumentation) ??  (0) 2020.12.22
[WEBTOB]Compression 설정  (0) 2020.12.17
728x90

출처 : https://blog.xenomity.com/Summary-Java-Agent-Bytecode-Instrumentation/

Summary Java Agent (Bytecode Instrumentation)

OverviewJava SE 5 에서 Bytecode Instrumentation의 범주로 새롭게 소개된 ‘Java Agent’ 명세에 대하여 간단히 소개하고자 한다. (* 일반적인 Agent 의미와 혼용되지 않는다.)

blog.xenomity.com

What are Java(JVM) Agent?
JVM Agent는 JVM에서 동작하는 Java 어플리케이션으로 JVM의 다양한 이벤트를 전달받거나 정보 질의, 바이트 코드 제어 등을 특정 API(Instrumentation API -java.lang.instrument-)를 통하여 수행할 수 있다.

보통 개발 도구 또는 모니터링 도구 개발에 응용된다.

바이트 코드 변조를 통한 개발의 편의성을 제공하는 AspectJ의 LTW(Load Time Weaver)나 Lombok과 같은 오픈소스가 대표적인 Java Agent의 활용 예이다.

Features
Agent는 지정된 JVM의 실행 가능한 최초 진입점인 ‘main’ 메서드를 가로채기 할 수 있다.
지정된 JVM에서 실행된다.
지정된 JVM의 동일한 System Class Loader 내에서 로드된다.
지정된 JVM의 Security Policy 및 Context의 영향을 받는다.
실행시간에 동적으로 bytecode를 조작할 수 있다.

Agent의 단일 진입점은 위와 같이 ‘premain’ 메서드를 구현하면 되며 바이트 코드를 포함한 추가적인 정보 수집 도구로 Instrumentation 인터페이스를 제공받을 수 있다.

728x90
728x90

출처 : https://m.blog.naver.com/PostView.nhn?blogId=rbtjqtjql&logNo=220993460343&proxyReferer=&proxyReferer=https:%2F%2Fwww.google.com%2F

BCI ( Byte Code Instrumentation ) in Java

이 글은 네이버 블로그 "욱짜 (ukja)" 님의 블로그 포스팅을 정리한 글이다. 출처는 아래를 참조한다. 출처...

blog.naver.com


■ BCI (Byte Code Instrumentation) ?
Java의 Byte Code에 직접 수정을 가해서, 소스 파일의 수정 없이 원하는 기능을 부여하는 기법
이러한 특징때문에 대부분의 Java 프로파일러나 모니터링 툴들이 BCI 기능을 사용하고 있다. Bytecode를 직접 수정할 수 있으므로 이를 통해 구현할 수 있는 기능은 무궁무진함.

■ Java Bytecode
JVM에서 인지할 수 있는 일종의 기계어(Machine Code)이며, 특정 OS / HW에 의존하지 않는, JVM에만 의존적이기 때문에 서로 다른 환경에서도 하나의 Bytecode로 구동이 가능(JVM은 공통이니까!!)

■ BCI를 활용하여 내가 생성한 클래스 파일 사용하게 하기
ClassReader 객체를 이용해 원래 클래스의 바이트 코드를 읽어들인다.
ClassAdapter 객체를 이용해 바이트 코드를 변경한다.
ClassWriter 객체를 이용해서 변경된 바이트 코드를 얻는다.

원래의 Exception 클래스를 변경(하진 않았지만)하여 새로운 Exception 클래스를 생성하고 파일을 확인하였다.

문제는 어떻게 하면 JVM의 rt.jar에서 제공하는 java.lang.Exception 클래스 파일이 아닌, 내가 생성한 Exception 클래스 파일을 쓰게 하느냐이다.

rt.jar파일을 직접 변경시킬순 없고 (매우 위험하고 법적인 문제가 될 수 있음!) 답은 -Xbootclasspath 옵션을 이용하는 것이다.

즉, -Xbootclasspath/p:<내가 작성한 Exception Class의 path>를 지정하면, JVM은 rt.jar보다 먼저(prepend) 내가 작성한 Exception Class 파일을 읽어들인다.

이렇게 함으로써 rt.jar 파일에 대한 수정을 가하지 않아도 된다.

728x90
728x90

클라이언트가 웹서버를 통해 큰 용량의 파일을 다운로드 할 때, 네트워크의 높은 사용률로 인해 부담이 될 수 있음.

웹서버에서 다운로드 할 파일을 압축하여 보냄으로써 네트워크의 부하를 줄여줄 수 있으며, 사용자의 응답시간을 줄일 수 있음.

※ 압축을 함으로써 웹서버의 자원사용률(CPU)는 가중됨.

 

■ 설정

 WEBTOB의 설정파일(http.m)에 다음과 같이 설정

  *SERVER

    Compress = [압축할 mime-type , 응답헤더의 Content-Type]

   EX) html  SVGNAME=htmlg, Minporc=10, Maxproc=10, Compress = "text/javascript"

※ WEBTOB 4.1.9.1 부터 사용 가능

 

로깅 설정에서 아래의 Format 설정 시 압축률 확인 가능

Format = "%z",

 

 

 

728x90
728x90

JEUS6에서 세션 클러스터링 구성 시 주의사항
1. WEBMain.xml 의 <web-container><context-group><session-config><distributable> 값이 반드시 true일 것
default값이 false이며, false 일 경우 분산식 세션매니져로 동작하게 된다. 따라서 자동으로 stickysession이 활성화 됨.
2. WEBMain.xml 의 <web-container><context-group><session-config><shared>
하나의 컨테이너에 다수의 context(application)사용 시 세션공유를 위해서는 해당옵션 값이 true여야 한다.
default 값 : false

728x90
728x90

개요
 JEUS 6008 에서 session.setMaxInactiveInterval 메소드를 통해 세션타임 무한대 설정을 하고도 서비스 세션이 유지되지 못하고 요청마다 새로이 생성됨

현상
 JEUS 6008 에서 서비스 세션이 요청마다 새로이 생성됨

원인
  session.setMaxInactiveInterval(-1) 를 통해 세션타임을 무한대로 유지한다는 설정을 하였으나,
JEUS 세션서버에서는 해당메소드의 값(-1)을 받으면 로컬에서 세션정보를 가지고 있다는 것으로 판단하여 해당 세션을 세션서버에서 삭제함

해결방안
web.xml의 session-timeout 설정을 통해 세션 타임관리를 하는 것이 좋음.
session.setMaxInactiveInterval 메소드를 사용한다면 session-timeout값과 맞출 것(무한대인 -1은 사용하지 말 것)
※ 해당문제는 JEUS 6008에서만 발생
JEUS 6009부터는 session.setMaxInactiveInterval(-1)이 지정되면 JEUSMain.xml의 <removal-to> 값만큼만 세션서버에서 해당 세션을 유지
  ※removal-to : file-db에 저장된 session 객체의 보존 기간을 지정하는 값

728x90

'IT > MiddleWare(WEB WAS)' 카테고리의 다른 글

[WEBTOB]Compression 설정  (0) 2020.12.17
[JEUS] 6버전 세션클러스터 구성 시 주의사항  (0) 2020.12.04
[WEBTOB]HSTS 설정  (0) 2020.11.23
[JEUS]jsper jsp파서 사용  (0) 2020.11.11
[MW]미들웨어 구성 시 유의사항  (0) 2020.11.05
728x90

1. HSTS (HTTP Strict Transport Security) 란?
일반적으로 HTTPS를 강제하게 될 때 서버측에서 302 Redirect 를 이용하여 전환(웹서버 설정을 통해)시켜 줄 수 있음. 하지만 이것이 취약점 포인트로 작용될 수 있다.

이러한 이유로 클라이언트 (브라우저) 에게 HTTPS를 강제 하도록 하는 것이 권장되는데, 이것이 HSTS (HTTP Strict Transport Security) 다. 클라이언트 (브라우저)에서 강제 하기 때문에 Plain Text (HTTP) 를 이용한 연결 자체가 최초부터 시도되지 않으며 클라이언트 측에서 차단된다는 장점이 있음. 

 

사용자가 최초로 사이트에 접속시도를 하게 되면 웹서버는 HSTS 설정에 대한 정보를 브라우저에게 응답하게 됨. 브라우저는 이 응답을 근거로 일정시간 (max-age) 동안 HSTS 응답을 받은 웹사이트에 대해서 https 접속을 강제화 함. (Response Header에 Strict-Transport-Security 값으로 존재)

 

 

크롬에서는 다음과 같은 명령어로 브라우저에 들어있는 HSTS값이 확인 가능

chrome://net-internals/#hsts

 

아래의 사이트에서 HSTS가 적용된 사이트인지 확인 가능

https://hstspreload.org

 

1.1. HSTS의 오점 

HSTS를 웹서버에서 리스폰스 헤더로 제공하는건 최초의 HTTP로 연결시에 HSTS 헤더가 내려오기전에 SSL 스트립이 가능한 문제가 여전히 존재. 따라서 웹페이지에 들어가지 않고도 브라우저 내장 preload를 갖추는게 가장 안전한데, 크롬 측에 조건 갖추고 제출하면 크롬 preload 리스트에 들어갈 수 있음. 크롬 리스트는 다른 브라우저도 공유함. // END

2. HSTS (HTTP Strict Transport Security) 의 설정방법
WEBTOB 설정파일(http.m)에서 다음과 같은 설정 추가
*HEADERS
HSTS ACTION="AddResponse",
FIELDNAME="Strict-Transport-Security",
FIELDVALUE="max-age=[시간ms]"
*VHOST
HEADERS="HSTS",

 

3. HSTS (HTTP Strict Transport Security) 를 이용한 SSL Strip 방어

MITM (Man in the Middle) 공격을 보안하기 위함. 일반적으로 TLS/SSL로 암호화 된 세션은 중간에서 공격자가 그 내용을 감청하더라도 암호화 되어 있기 때문에 데이터가 보호 될 수 있습니다. 따라서 MITM은 SSL Strip (SSL/TLS 로 암호화 된 세션을 강제로 암호화 하지 않은 HTTP 세션으로 유도) 을 통해 공격 

 

이러한 공격은 HSTS를 적용을 통해 SSL 연결을 강제화하여 방어 할 수 있음.

 

 

 

 

728x90
728x90

JEUS6
<commnad-option> -Djeus.servlet.jsp.modern=true </commnad-option>
 
- 오픈소스 등 웹 프레임워크를 보다 잘 지원하고 호환성 문제를 줄이기 위해서 톰캣 Jasper 기반의 JSP 파서를 사용

728x90

+ Recent posts