프로그래밍 언어 31

[Tips] 간단한 SSL Client/Server 작성 테스트

Windows 환경에서 Java 기반의 SSL Client/SSL 동작을 위해 간단한 프로그램과 옵션을 정리합니다. WAS를 사용 시에도 기본적으로 Java 레벨에서 필요한 작업을 사전 인지하고 있을 필요가 있습니다. Java 기반에서는 openssl도 사용할 수 있지만, %JAVA_HOME%\bin 에서 제공되는 keytool 유틸리티를 유용하게 사용합니다. 1. Server 프로그램 작성 1) 소스 작성 import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocket; import java.io.BufferedReader; import java.io.InputSt..

[명령어] javap 명령어

1. 개요 javap는 하나 이상의 클래스(class) 파일을 디스어셈블(disassemble) 하는 명령어이다. 사용법은 아래와 같다. $ javap [클래스] 예를들어, $ javap HelloWorld 명령을 실행하면, Compiled from "HelloWorld.java" public class HelloWorld { public HelloWorld(); public static void main(java.lang.String[]); } javap 명령어는 어느 자바 소스로 부터 컴파일되었고, 필드와 메소드를 확인할 수 있다. 2. 클래스(class) 파일이 컴파일된 자바 버전 확인 javap 명령어가 필요한 경우에는 클래스(class) 파일이 컴파일된 자바 버전을 알고 싶을 때, 자주 사용된다..

[정보] Java에서 assert 사용하기

Java 1.4부터 assert 구문을 사용 가능합니다. assert 구문은 프로그램에 대한 가정을 테스트 할 수 있습니다. 프로그램의 오류를 감지하고, 수정하는 효과적인 방법을 제공합니다. [사용법] 아래와 같은 두가지 방법이 있습니다 1. expression1의 조건이 '참'이면 아래 구문을 실행하고, '거짓'이면 AssertionError 예외가 발생합니다. assert expression1; 2. expression1의 조건이 '참'이면 아래 구문을 실행하고, '거짓'이면 AssertionError 예외와 함께 expression2가 예외로 출력됩니다. assert expression1: expression2; [예제] class AssertionTest { public static void ma..

[정보] Apache Log4j 1.x 보안 업데이트 권고사항

1. CVE-ID : CVE-2021-4104 참고로, Apache Log4J는 효율적인 로그를 남기기 위한 프레임워크 입니다. Apache Log4j 2에 대한 보안업데이트 권고사항은 https://blueyikim.tistory.com/2282 참고할것 2. 보안 이슈 설명 * CVE-2021-4104 : https://nvd.nist.gov/vuln/detail/CVE-2021-4104 - Log4j 1.2의 JMSAppender는 공격자가 Log4j 구성에 대한 쓰기 액세스 권한을 가질 때 신뢰할 수 없는 데이터의 역직렬화에 취약합니다. - 공격자는 TopicBindingName 및 TopicConnectionFactoryBindingName 구성을 제공하여 JMSAppender가 CVE-2021..

[Tips] 자바에서 Runtime 클래스

모든 자바 애플리케이션은 애플리케이션이 수행 중인 환경과 인터페이스 할 수 있도록 Runtime 클래스의 단일 인스턴스를 가지고 있다. 현재 런타임(runtime)은 getRuntime() 메소드를 통해 얻어지고, 자체적으로 생성할 수는 없다. 예) Runtime rt = Runtime.getRuntime(); 1. Runtime 클래스에서 주로 사용되는 메소드 - exec(String cmd) : 별도 프로세스로 명령어(cmd)를 실행함 - exit(int status) : JVM을 종료함 - gc() : GC(가비지 콜렉션)을 실행함 - maxMemory() : JVM이 할당하여 사용할 수 있는 최대 메모리 양을 리턴함 (JVM 옵션에서 -Xms 값) - totalMemory() : JVM이 사용하고..

[정보] Apache Log4j 2 보안 업데이트 권고 사항

1. CVE-ID : CVE-2021-44228 / CVE-2021-45046 참고로, Apache Log4J는 효율적인 로그를 남기기 위한 프레임워크 입니다. 2. 보안 이슈 설명 * CVE-2021-44228 : https://nvd.nist.gov/vuln/detail/CVE-2021-44228 - 구성, 로그 메시지 및 매개변수에 사용되는 JNDI 기능은 공격자가 제어하는 ​​LDAP 및 기타 JNDI 관련 엔드포인트로부터 보호하지 않습니다. - 로그 메시지 또는 로그 메시지 매개변수를 제어할 수 있는 공격자는 메시지 조회 대체가 활성화된 경우 LDAP 서버에서 로드된 임의의 코드를 실행할 수 있습니다. - 영향받는 버전 : 2.0-beta9 ~ 2.14.1 버전 (Log4j 2.12.2 제외) ..

[Tips] 환경변수 가져오는 방법

Java 프로그래밍에서 어떠한 변수를 하드코딩하지 않고, 환경변수 또는 프로퍼티를 통해 프로그래밍 함으로써 개발/운영 환경과 같이 서로 다른 환경에서 동일한 코드로 원하는 결과를 얻을 수 있다. 1. JVM 기동할 때, -Dkey=value 옵션을 설정한 경우 : System.getProperty() 메소드를 활용하여 값을 가져옴 예시) $ java -Xms 256 -Xmx 512 ... -Dipaddr=10.1.1.5 ... // Java 기동 시에 -D 옵션 설정 String key = "ipaddr" String value = System.getProperty(key) // value

[정보] 데이터 구조(list, dict, tuples, sets, strings)

파이썬에서 사용가능한 데이터 구조는 다양하게 있다. 내장된 데이터 구조는 lists, tuples, dictionaries, strings, sets과 frozensets이 있다. Lists - 객체의 순차 배열, 변경가능(mutable), 대괄호(brakets, []) 사용. 예로 l = [1, 2, "a"] Tuples - 객체의 순차 배열, 변경불가능(immutable), 괄호(parentheses, ()) 사용. 예로 t = (1, 2, "a") Dictionaries - key, value 쌍으로 구성된 항목(item)의 연속. 중괄호(curly brackets, {}) 사용. 예로 d = {"a" : 1, "b", 2} Strings - 문자의 연속, 변경불가능(immutable), 예로 te..

[Tips] 자바 클래스를 생성하기 위해 사용한 JDK 버전 체크 방법

생성된 클래스 파일(.class)이 컴파일에 사용된 JDK 버전을 알고 싶을때, javap 라는 명령어를 이용하면 된다.javap는 "java dissembler" 이다. javap를 사용하여 버전을 알아내는 명령은 아래와 같다. 1. 사용법 1) Unix/Linux 환경 javap -verbose MyClass | grep "major"결과예시) major version: 51 2) Windows 환경 javap -verbose MyClass | findstr "major"major version: 50 2. 결과값 JDK 버전별로 major version 숫자가 다르다. JDK 버전 major version 1.2 major version 46 1.3 major version 47 1.4 major ..