2012-03-25 3 views
0

서버 (내가 프로그래밍 한)와 통신하는 클라이언트 프로그램을 만들고 있습니다. 나는 주사위를 굴리는 나 자신을위한 작은 게임을 만들고 있는데 서버도 그렇다. 높은 수치를 얻은 사람은 누구나 승리합니다. 그러나 내 코드 내에서 사용자가 단추를 누를 때 서버 명령을 보내고 서버가 응답 한 내용을 돌려 보내 GUI 창에 표시 할 수 있습니다. 그러나이 방법은 매우 안전하지 않습니다. 예를 들어 사람은 jar 파일을 간단하게 디 컴파일하여 항상 12로 굴릴 수 있습니다. 두 롤이 함께있는 유일한 장소 (사용자와 서버)가 사용자 화면이기 때문에 게임을 평가해야합니다 클라이언트로부터, 분명히 안전하지는 않습니다. 내 게임을 더욱 안전하게하려고 노력 중이며 2 가지 옵션을 발견했습니다.Java 코드, 보안 성

  1. 난독

    • 사람이 사용하기 매우 쉬운 알고하지 않는 한

      , 나는 그들이 거의 GUI를 내가 쉽게 할 수있는 "팝업과 함께 오지로, 그 중 하나를 설정하는 방법을 알아낼 수 없습니다 "
  2. 에 내 .jar 파일이 .exe 인 바인딩 솔직히 시간을 잘 모릅니다

    • 이게 안전 해. 두 가지 (주로 분명히하지 않는 바이러스를 만들기위한)를 하나의 .exe 파일에 "바인딩"할 수있는 프로그램이 있습니다. 내 .jar 파일을 .exe 파일로 바인딩 할 수는 있지만 .exe 파일을 .jar 파일로 다시 역 컴파일 할 수 있는지, 그리고 .java 파일로 다시 역 컴파일 할 수 있는지 여부는 여전히 알 수 없습니다. 그런데

또 다른 보안 문제는

+0

사용자는 항상 서버의 IP 주소를 알아낼 수 있습니다. 네트워크 트래픽을 살펴보십시오. – Ragnar123

+0

감사합니다. 그렇다면 ip 명령을 무시하면 서버 명령을 침입으로부터 자유롭게 유지하는 보안에 더 많은 것이 있습니다. – k9b

+1

클라이언트/서버 프로그래밍의 규칙 # 1 : ** 클라이언트를 신뢰하지 마십시오. **. 어떤 언어로든 클라이언트를 "보안"할 수는 없습니다. 원하는 보안 방법을 통해 원하는대로 시도 할 수 있지만 최종 결과는 동일합니다. –

답변

6

절대 신뢰 클라이언트 입력 (I 클라이언트 사용자에 대해 알고 싶지 않아) 내 IP 주소에서 서버에 연결하는 것입니다.

진정한 "안전한"방법은 서버가 자체 롤과 클라이언트 롤을 모두 생성하도록하는 것입니다.

물론 롤 비교의 결과가 사용자가 보는 것 이상의 영향을 미치지 않는다면 (즉, 클라이언트가 누가 이길지를보고하지 않는다면), 정말로, 누가 신경 써야합니까? 솔리테어가 항상이기도록 패치 할 수는 있지만, 재미는 없습니다.

2

코드가 다른 사람의 컴퓨터에있는 경우 해당 코드가 이미 손상되어 악용 된 것으로 간주해야합니다. 크래커와 개발자 간의 경쟁에서 크래커들은 항상 필요한 모든 것을 가지고 있기 때문에 항상 크래커가 승리합니다. 항아리는 쉽게 (쉽게) 디 컴파일 및 해제 될 수 있으며, .exes는 따로 따로 선택할 수 있으며, 극단적 인 수준에서는 운영 체제가 뒤에서 뒤쪽으로 이동하도록 수정할 수 있습니다.

대신에 아키텍처를 다시 고려해야합니다. 에 주사위를 굴려야합니까? 서버가 둘 다 굴러 갈 수 있습니까?

1

".exe"에 대한 난독 화 및 컴파일은 비교적 쉽게 무효화 될 수 있습니다. 해커/크래커 및 안티 바이러스 보안 전문가는 매일 이런 종류의 작업을 수행합니다.

기본적으로 신뢰하지 않는 사람이 제어 할 수있는 컴퓨터에서는 실행중인 응용 프로그램을 신뢰할 수 없습니다. 실제로 이것은 (잠긴 방화벽이있는) 서버 실에없는 것을 의미합니다.

(참고 : TPM 기반 시스템조차도 TPM 칩에 대한 공격이 성공적 이었기 때문에 잠재적으로 취약 할 수 있습니다. 어쨌든 TPM은 응용 프로그램 수준의 코드 보안에 사용할 수 없으므로 실용적이지 않습니다. OS 레벨에서 사용조차하지 않는다 ... Windows의 다음 버전이 TPM에 방해가되는 하드웨어가 필요하다고 들었지만