ABAP 와 자바 단일 모드 의 공 방
3365 단어 대리설계 하 다.design-pattern자바abap
CLASS zcl_jerry_singleton DEFINITION
PUBLIC
FINAL
CREATE PRIVATE .
PUBLIC SECTION.
INTERFACES if_serializable_object .
CLASS-METHODS class_constructor .
CLASS-METHODS get_instance
RETURNING
VALUE(ro_instance) TYPE REF TO zcl_jerry_singleton .
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA so_instance TYPE REF TO zcl_jerry_singleton .
DATA mv_name TYPE string .
DATA mv_initialized TYPE abap_bool .
METHODS constructor .
ENDCLASS.
CLASS ZCL_JERRY_SINGLETON IMPLEMENTATION.
* ---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_JERRY_SINGLETON=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------
METHOD class_constructor.
so_instance = NEW zcl_jerry_singleton( ).
ENDMETHOD.
* ---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_JERRY_SINGLETON->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------
METHOD constructor.
mv_name = 'Jerry'.
IF mv_initialized = abap_false.
mv_initialized = abap_true.
ELSE.
MESSAGE 'you are in trouble!' TYPE 'E' DISPLAY LIKE 'I'.
ENDIF.
ENDMETHOD.
* ---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_JERRY_SINGLETON=>GET_INSTANCE
* +-------------------------------------------------------------------------------------------------+
* | [
METHOD get_instance.
ro_instance = so_instance.
ENDMETHOD.
ENDCLASS.
직렬 화 / 반 직렬 화 공격 단일 모드 를 통 해:
DATA(lo_instance) = zcl_jerry_singleton=>get_instance( ).
DATA: s TYPE string.
CALL TRANSFORMATION id SOURCE model = lo_instance RESULT XML s.
DATA: lo_instance2 TYPE REF TO zcl_jerry_singleton.
CALL TRANSFORMATION id SOURCE XML s RESULT model = lo_instance2.
단 례 의 제한 을 피해 두 번 째 실례 를 만 들 었 다.
Java
직렬 화 / 반 직렬 화 공격 외 에 반사 공격 도 할 수 있다.
그러나 저 는 이 단일 클래스 Jerry Singleton 의 구조 함 수 를 반 사 를 통 해 Accessible 에 접근 할 수 있 도록 설정 한 다음 에 이 구조 함 수 를 반사 적 으로 호출 하여 새로운 대상 인 스 턴 스 를 생 성 할 수 있 습 니 다.이렇게 해서 단일 모델 을 파괴 했다.
여섯 번 째 줄 코드 는 false 를 인쇄 합 니 다.
이러한 공격 에 대해 실행 가능 한 방어 조 치 는 단일 클래스 의 구조 함수 에서 불 변 수 를 정의 하고 false 로 초기 화 하 는 것 입 니 다.구조 함수 가 실 행 된 후 이 변 수 는 true 로 설정 되 었 습 니 다.다음 구조 함수 가 다시 실 행 될 경우 인위적인 이상 을 던 져 구조 함수 의 중복 집행 을 피한다.
이러한 방어 조 치 는 싱글 톤 의 공격 을 근본적으로 막 을 수 없다. 공격 자 는 여전히 반사 적 으로 불 변수 flag 의 값 을 수정 하여 이 검 사 를 돌아 갈 수 있 기 때문이다.
가장 이상 적 인 공격 을 받 지 않 는 단일 모드 구현 은 자바 에서 매 거 진 Enumeration 의 특성 을 빌 리 는 것 입 니 다.
이러한 실현 유형의 단일 모델 의 소비 코드:
System.out.println("Name:" + JerrySingletonAnotherApproach.INSTANCE.getName());
만약 에 공격 자가 앞에서 소개 한 반사 코드 를 통 해 이러한 실현 방식 의 단일 사례 를 공격 하면 JDK 는 NoSuchMethodException 이상 을 던 집 니 다.
그 이 유 는 현재 우 리 는 자바 매 거 방식 을 통 해 이 루어 진 단일 사례 이 고 매 거 류 는 전통 적 인 의미 에서 의 구조 함수 가 없 기 때문에 이런 반사 공격 에 면역 이 되 기 때문이다.
더 많은 Jerry 의 오리지널 글 을 얻 으 려 면 대중 번호 인 '왕 자 희' 를 주목 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 에이전트(jdk 정적 에이전트, 동적 에이전트와 cglib 동적 에이전트)2. jdk 정적 에이전트 에이전트 클래스 System.out.println ("사무가 끝났습니다."); 3. jdk 동적 에이전트 에이전트 클래스 4. 에이전트 클래스 3. jdk 동적 에이전트는 인터페이스 에이전...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.