2014-11-09 4 views
2

필드, 메소드 또는 생성자에 관계없이 리플렉션을 통해 모든 것을 액세스 할 수 있으므로 개인적인 것을 선언하면 실제로 도움이됩니까 /해야합니까? 사설 필드의 유일한 목적은 다른 프로그래머에게이 필드가 이와 같이 사용되도록 의도되지 않았 음을 알리는 것입니까?민간 분야는 실질적인 보안을 제공합니까?

보안에 대해 이야기하면서 사용자가 개인 정보 및 보호 된 필드 인 API를 액세스하지 못하게 할 수있는 방법이 있습니까?

+6

액세스 수정자는 실제로 보안에 관한 것이 아니며 캡슐화를 제공합니다. –

+0

그럼 어디에서 보안을 얻을 수 있습니까? –

+0

보안이 API 디자인과 혼동스러워 보입니다. 사용자가 제어하는 ​​JVM에서 코드를 실행하지 않는 한 사용자가 API에 액세스하는 것을 막을 수있는 방법이 없습니다. –

답변

2

보안 관리자가없는 JVM에서 신뢰할 수없는 코드가 실행되도록 허용하면 setAccessible을 통해 private 검사를 해제 할 수 있으므로 private 필드와 메소드를 리플렉션을 통해 사용할 수 있습니다. 자바의 SecurityManager

poor history of withstanding determined attacks이 그래서 SecurityManager 임의의 바이트 코드가로드되지 않을 수있는 결정 공격자를 방지 할 수 있다고 가정하는 것이 합리적되지 않습니다 있습니다.

SecurityManager이 성공하더라도, 직렬화 API와 같은 저급 Java API를 통해 비밀 정보가 추출 된 방법을 보여줍니다.

Can a secret be hidden in a 'safe' java class offering access credentials?은 신뢰할 수없는 코드를 실행하는 JVM의 필드에 중요한 데이터를 저장하려는 함정의 일부를 나열합니다.