본문 바로가기

프로그래밍 언어/Java

(39)
시큐어코딩(3) 필드의 불변성(immutable)은 악의적인 변경뿐만 아니라 부주의로 인한 변경도 방지하여, 입력을 받아들이거나 값을 반환할 때 방어적인 복사가 불필요해진다. 그러나 일부 민감 클래스들은 불변성을 가질 수 없다. 다행히, 비신뢰-코드(untrusted code)는 변경 불가능한 래퍼를 이용하여 가변적(Mutable) 클래스에 읽기전용으로만 엑세스할 수 있다. 부적절한 코드(예제). 이 예는 Mutable 클래스로 구성되어 있는데 내부 객체의 수정을 허용한다. 비신뢰-호출자(untrusted invoker)는 변경자 메서드인 setArray()를 호출하여 객체의 불변성(immutable)을 위반하고 있다. 접근자 메서드 getArray()의 호출을 통해 클래스의 비공개인 내부 상태를 수정할 수 있도록 되어..
시큐어 코딩(2) 클라이언트-서버 모델을 사용하는 응용프로그램을 작성할 때 사용자 인증 정보와 같은 민감-정보를 클라이언트 측에 저장하면 클라이언트가 공격에 취약할 경우 허가되지 않은 벙법으로 민감-정보가 노출된다. 웹 응용프로그램에서 이 문제에 대한 가장 보편적인 완화책은 쿠키를 클라이언트에게 제공하고 민감-데이터는 서버에 저장하는 것이다. 쿠키는 웹 서버에 의해 생성되고 일정 기간 동안 클라이언트에 저장된다. 클라이언트가 서버에 다시 연결할 때 클라이언트가 서버에게 자신을 식별하도록 하는 쿠키를 제공하면 서버가 민감-정보를 제공하는 것이다. 쿠키는 XSS공격으로부터 민감-정보를 보호하지 못하는데 XSS공격이나 클라이언트를 직접 공격해서 쿠키를 얻을 수 있는 공격자는 쿠키를 이용하여 서버로부터 민감-정보를 탈취한다. 만..
자바 사큐어코드(1) 자바 시큐어 코딩 chapter1의 안전성부분은 자바 프로그래밍 언어와 런타임 시스템은 안전성을 염두에 두고 설계되었다. 예를 들어 프로그래머가 명시적 포인터를 사용하지 않도록 하며 널 포인터를 참조하면 예외(exception)를 발생시킨다. 이와 유사하게 배열이나 문자열의 범위를 벗어나 엑세스해도 예외가 발생된다. 자바는 타입에 대해 엄격하게 처리하는 언어이다 선술타입과 변환에서와 같이 모든 암묵적 타입 변환에 대해 플랫폼을 독립적으로 잘 정의되어 있다. 자바 가상 머신(JVM:Java Virtual Machine)은 바이트코드가 자바 언어 규격을 준수하면서 수행되도록 보장하기 위해 바이트코드 검증기를 내장하고 있다.(Java SE 7에서는 언어에서 정의한 검사가 적절히 이루어져 우회할 수 없도록 한다..
자바 8과 자바 1.8은 동의어인가 오늘은 늘상 궁금했지만 적극적으로 알아보진 않았던 것에 대해 알아보려고 한다. Android에서 Java 8 버전을 쓰려면 build.gradle 파일에 다음과 같은 configuration을 추가해주어야 하는데, 그렇다면 Java 8 버전이라고 하는 게 맞을까? 버전 1.8이라고 하는 것이 맞을까? compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } 어느 것이 더 정확한 표현일까? Java 8 vs. Java 1.8 현재 사용 중인 버전이기 때문에 8 혹은 1.8이라고 표기했지만, 6과 1.6, 7과 ..
2. 객체와 클래스 클래스란 클래스는 프로그램을 효율적으로 작성하도록 도와주는 개념입니다. 모든 자바 소스는 클래스를 포함하고 있고, 반드시 하나 이상의 클래스가 존재해야 합니다. 클래스는 클래스가 표현하는 사물의 일반적인 요소에서 출발하는 것이 좋습니다. 예를들면 자동차의 경우 차량번호와 연료량을 항상 가지고 있어야 합니다. 이렇게 자동차의 특성과 기능들을 정리하여 하나의 클래스로 묶어서 표현할 수 있습니다. '차량 번호는 ㅇㅇㅇ입니다.' '남은 연료량은 ㅇㅇ입니다.' 1 2 3 4 5 6 7 8 9 class 자동차 { 차량번호; 남은연료량; 차량번호결정하기; 연료를 넣기; 차량번호와 남은연료 양을 표시하기 } cs 클래스 선언하기 물건의 상태 특성, 기능을 정리한 클래스를 작성하는 작업을 '클래스 선언' 이라고 합니다..
2. 문자열 정렬 Arrays.sort()을 이용하면 쉽게 배열(Array)을 정렬(sorting)할 수 있습니다. 배열에 든 내용이 Integer인지 String인지는 중요하지 않습니다. 기본적으로 객체는 Comparable이 구현되어있습니다. sort()는 Comparable에 의해 리턴되는 값을 비교하여 오름차순 또는 내림차순으로 배열을 정렬합니다. 다음 내용들을 구현해보면서 Arrays.sort() 사용법에 대해서 알아보겠습니다. int 배열 정렬 int 배열 정렬 (오름차순, 내림차순) int 배열, 부분 정렬 String 배열 정렬 String 배열, 문자 길이 순서로 정렬 객체 배열 정렬 int 배열 정렬 (오름차순, 내림차순) 아래와 같이 int 배열이 있습니다. Arrays.sort()의 인자로 이 배열을..
1. equal함수 원리 및 동작방법 == 주소 값을 비교하여 동일하면 true를 출력합니다. String str1 = "Hello"; String str2 = "Hello"; String str3 = new String("Hello"); System.out.println(str1 == str2); // true가 출력됨 System.out.println(str1 == str3); // false가 출력됨 위 코드에서 str1과 str2는 서로 같은 주소값을 가지지만 str3는 new 키워드를 사용했기 때문에, == 연산자로 비교했을 때 false가 나타납니다. A.equals(B) A와 B가 가지고 있는 값이 동일하면 true를 출력합니다. String str1 = "Hello"; String str2 = "Hello"; String st..