본문 바로가기

자바 시큐어 코딩3

민감한 가변적(Mutable)클래스에 수정이 불가능한 래퍼를 제공하라. 필드의 불변성(immutable)은 악의적인 변경뿐만 아니라 부주의로 인한 변경도 방지하여, 입력을 받아들이거나 값을 반환할 때 방어적인 복사가 불필요해진다. 그러나 일부 민감 클래스들은 불변성을 가질 수 없다. 다행히, 비신뢰-코드(untrusted code)는 변경 불가능한 래퍼를 이용하여 가변적(Mutable) 클래스에 읽기전용으로만 엑세스할 수 있다. 부적절한 코드(예제). 이 예는 Mutable 클래스로 구성되어 있는데 내부 객체의 수정을 허용한다. 비신뢰-호출자(untrusted invoker)는 변경자 메서드인 setArray()를 호출하여 객체의 불변성(immutable)을 위반하고 있다. 접근자 메서드 getArray()의 호출을 통해 클래스의 비공개인 내부 상태를 수정할 수 있도록 되어.. 2020. 4. 6.
클라이언트에 암호화되지 않은 민감-데이터 제한 클라이언트-서버 모델을 사용하는 응용프로그램을 작성할 때 사용자 인증 정보와 같은 민감-정보를 클라이언트 측에 저장하면 클라이언트가 공격에 취약할 경우 허가되지 않은 벙법으로 민감-정보가 노출된다. 웹 응용프로그램에서 이 문제에 대한 가장 보편적인 완화책은 쿠키를 클라이언트에게 제공하고 민감-데이터는 서버에 저장하는 것이다. 쿠키는 웹 서버에 의해 생성되고 일정 기간 동안 클라이언트에 저장된다. 클라이언트가 서버에 다시 연결할 때 클라이언트가 서버에게 자신을 식별하도록 하는 쿠키를 제공하면 서버가 민감-정보를 제공하는 것이다. 쿠키는 XSS공격으로부터 민감-정보를 보호하지 못하는데 XSS공격이나 클라이언트를 직접 공격해서 쿠키를 얻을 수 있는 공격자는 쿠키를 이용하여 서버로부터 민감-정보를 탈취한다. 만.. 2020. 4. 2.
민감-데이터의 수명을 제한하는 자바시큐어코드 ※ 귀찮아도 한번 읽고 보자! 자바 시큐어 코딩 chapter1의 안전성부분은 자바 프로그래밍 언어와 런타임 시스템은 안전성을 염두에 두고 설계되었다. 예를 들어 프로그래머가 명시적 포인터를 사용하지 않도록 하며 널 포인터를 참조하면 예외(exception)를 발생시킨다. 이와 유사하게 배열이나 문자열의 범위를 벗어나 엑세스해도 예외가 발생된다. 자바는 타입에 대해 엄격하게 처리하는 언어이다 선술타입과 변환에서와 같이 모든 암묵적 타입 변환에 대해 플랫폼을 독립적으로 잘 정의되어 있다. 자바 가상 머신(JVM:Java Virtual Machine)은 바이트코드가 자바 언어 규격을 준수하면서 수행되도록 보장하기 위해 바이트코드 검증기를 내장하고 있다.(Java SE 7에서는 언어에서 정의한 검사가 적절히 .. 2020. 3. 30.