본문 바로가기

TEST

테스트15

릴리스 1.4에서는 writeUnshared 및 readUnshared 메소드가 다음에 추가되었습니다.

가짜의 객체 참조 공격을 저지하는 것을 목표로 한 ObjectOutputStream 방어 복사 비용없이 [직렬화] 불행히도 이러한 방법

ElvisStealer와 본질적으로 유사한 정교한 공격에 취약합니다.

공격은 Item 77에 설명되어 있습니다. writeUnshared 및 readUnshared를 사용하지 마십시오.

행동 양식 일반적으로 방어 복사보다 빠르지 만 제공하지 않습니다.

필요한 안전 보장 다음은 간단한 리트머스 테스트로 기본 readObject 메서드는 클래스에 허용됩니다 : public 생성자를 추가하는 것이 편안할까요?

객체의 각 비 transient 필드에 대한 값을 매개 변수로 사용합니다.

유효성 검사를하지 않고 필드에 값을 저장 했습니까? 그렇지 않은 경우 readObject 메소드를 제공하고 모든 유효성 검사를 수행해야하며

생성자에게 필요한 방어 복사 또는 직렬화 프록시 패턴 (항목 78)을 사용하십시오.

readObject 메소드와 생성자 간에는 다른 유사점이 하나 있습니다. 비 직렬 직렬화 클래스에 관한 readObject 메소드는 호출하지 말아주세요.

직접 또는 간접적으로 재정의 할 수있는 방법 (항목 17) 이 규칙을 위반하는 경우 메소드가 오버라이드 (override)되고, 오버라이드 (override)되는 메소드가 서브 클래스의 상태가 비 직렬화되었습니다. 프로그램 오류가 발생할 가능성이 있습니다.

[Bloch05, 퍼즐 91]을 요약하면, 언제든지 readObject 메소드를 작성하고 mind-set을 채택하십시오.

유효한 인스턴스에 관계없이 생성해야하는 공용 생성자를 작성한다고 가정합니다.

주어진 바이트 스트림의 크기, 바이트 스트림이 나타내는 것으로 가정하지 마십시오.

실제의 직렬화 된 인스턴스 이 항목의 예제는 기본 직렬화 된 형식을 사용하면 제기 된 모든 문제가 클래스를 사용자 정의 직렬화 양식으로 만듭니다. 

여기에는 요약 된 양식으로 지침이 있습니다. 

방탄 readObject 메소드를 작성하기위한 예 :

• 비공개로 유지되어야하는 객체 참조 필드가있는 클래스의 경우 해당 필드에 각 오브젝트를 복사하십시오. 

불변 클래스의 변경 가능 구성 요소가 가을 이 카테고리에 불변성을 검사하고 검사가 실패하면 InvalidObjectException을 던집니다.

수표는 방어적인 복사를 따라야합니다.

• 전체 객체 그래프가 비 직렬화 된 후에 유효성을 검사해야하는 경우, ObjectInputValidation 인터페이스 [JavaSE6, Serialization]입니다.

• 클래스에서 직접 또는 간접적으로 무시할 수있는 메서드를 호출하지 마십시오.

'TEST' 카테고리의 다른 글

테스트17  (0) 2017.08.05
테스트16  (0) 2017.08.05
테스트14  (0) 2017.08.02
테스트13  (0) 2017.08.02
테스트12  (0) 2017.07.31