저는 실제로 서버 측에서 (역할에 따라) 사용 가능한 활동을 제한하는 것이 충분하지 않으면보다 큰 문제가 있다고 생각합니다. 사용자가 자신의 클라이언트를 작성하지 않더라도 원격 호출에 사용하는 메커니즘은 가로 채어 조작하기 쉽습니다. 결론은 서버에 대해 수행 할 수있는 가능한 호출을 제한해야하며 서버에 대한 각 호출을 잠재적 인 악의적으로 취급해야한다는 것입니다.
특정 인증 된 사용자가 클라이언트에서 클라이언트를 사용 중이지만 클라이언트를 사용하지 않는다면 괜찮을 수있는 서버 작업이 있다고 생각할 수 있습니까? 그렇다면 나는 당신이 당신의 고객에게 너무 강하게 의존하고 있다고 주장 할 것입니다.
그러나 비판하기보다는 질문에 대한 실제 답변도 제공하고 싶습니다. 악의있는 사용자를 상상하는 경우 jar 파일에 서명하는 것으로 충분하지 않다고 생각합니다. 일반적으로 공개 키 암호화는 소스를 리버스 엔지니어링하는 가상의 악의적 인 사용자가 공개 키에 액세스 할 수 있으므로 사용자가 구축 한 모든 인증을 스푸핑 할 수 있기 때문에 공개 키 암호화가별로 도움이되지 않을 수 있습니다.
궁극적으로 당신이 신뢰하는 시스템의 누군가, 그리고 당신은 그것이 누구인지 알아 내야하고 그들 주위에 당신의 보안을 기반으로해야합니다.예를 들어, 신뢰할 수없는 특정 회사의 사용자가 많을 수도 있고 관리자를 감독하는 관리자 한 명, 신뢰할 수있는 관리자가 있다고 상상해보십시오. 이 시나리오에서는 관리자가 시작할 때 특수 코드를 입력하고 해당 코드를 메모리에 저장하고 요청과 함께 전달하도록 클라이언트를 설정할 수 있습니다. 이렇게하면 사용자가 코드를 리버스 엔지니어링하면 관리자 코드가 생성되지 않습니다. 물론 클라이언트로부터 서버로의 호출은 가로 채기와 조작에 취약 할 수 있습니다 (이 요구 사항은 사용자의 목에 고질적 인 고통이 될 수 있습니다).
결론 : 사용자의 컴퓨터가 서버를 호출하는 경우 사용자가 서버를 호출하는 것보다. 사용자를 신뢰하지 마십시오. 그들이 사용하는 클라이언트가 무엇이든 관계없이 할 수있는 일을 제한하십시오.
나는 사용자 이름/비밀번호로 역할을하지만 (물론), 사용자가 자신의 클라이언트를 작성할 수있는 문제를 해결하지 못합니다. 그러나 후자의 부분은 흥미 롭습니다. 답변 해주셔서 감사합니다. –
당신이 말하는 웹입니까? 이것은 웹 응용 프로그램이 아니며 분산 java EE 응용 프로그램입니다. 사용자가 사용자/암호 쌍을 가지고 있으면 자신의 클라이언트를 작성하여 해당 사용자/패스를 사용할 수 있습니다. 그는 그 때 로그인 할 것입니다. Woulnd't he? 그는 우리가 알고있는 한 분명히 우리 시스템에있을 것입니다. –
사용자 이름과 암호가 하드 코드되어 있습니까? 이 끔찍한 상황에서 예, 그는 로그인 할 수 있습니다. 데이터베이스와 비교하여 검사하면 항상 변경할 수 있습니다. 또한 분산 java EE 애플리케이션은 세션을 사용합니다. – kgiannakakis