필드, 메소드 또는 생성자에 관계없이 리플렉션을 통해 모든 것을 액세스 할 수 있으므로 개인적인 것을 선언하면 실제로 도움이됩니까 /해야합니까? 사설 필드의 유일한 목적은 다른 프로그래머에게이 필드가 이와 같이 사용되도록 의도되지 않았 음을 알리는 것입니까?민간 분야는 실질적인 보안을 제공합니까?
보안에 대해 이야기하면서 사용자가 개인 정보 및 보호 된 필드 인 API를 액세스하지 못하게 할 수있는 방법이 있습니까?
필드, 메소드 또는 생성자에 관계없이 리플렉션을 통해 모든 것을 액세스 할 수 있으므로 개인적인 것을 선언하면 실제로 도움이됩니까 /해야합니까? 사설 필드의 유일한 목적은 다른 프로그래머에게이 필드가 이와 같이 사용되도록 의도되지 않았 음을 알리는 것입니까?민간 분야는 실질적인 보안을 제공합니까?
보안에 대해 이야기하면서 사용자가 개인 정보 및 보호 된 필드 인 API를 액세스하지 못하게 할 수있는 방법이 있습니까?
보안 관리자가없는 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의 필드에 중요한 데이터를 저장하려는 함정의 일부를 나열합니다.
액세스 수정자는 실제로 보안에 관한 것이 아니며 캡슐화를 제공합니다. –
그럼 어디에서 보안을 얻을 수 있습니까? –
보안이 API 디자인과 혼동스러워 보입니다. 사용자가 제어하는 JVM에서 코드를 실행하지 않는 한 사용자가 API에 액세스하는 것을 막을 수있는 방법이 없습니다. –