[게임 서버] 7.11 보안을 위한 주의 사항

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자

📦 7. 데이터베이스 기초

👉🏻 11. 보안을 위한 주의 사항

🔒 기본 보안 수칙

  • 데이터베이스에 접속할 때 접속 가능한 계정으로만 접속하게 한다.
  • 데이터베이스 관리자 계정은 오직 관리자만 다룰 수 있게 한다.
  • 게임 서버가 사용하는 계정은 게임 서버가 다루는 테이블 이외에는 건드리지 못하게 한다.
  • 게임 서버 이외의 다른 곳에서 접속하지 못하게 네트워크를 격리하자.
    • 사설 네트워크, 방화벽 사용
  • 질의 구문을 해커가 조작할 수 있는 상황을 고려하자.
  • 이 외에도 다양한 주의 사항이 있다.

💉 질의 구문 인젝션

문제 상황

sprintf(queryString, "select * from t1 where a='%s'", userName);
db.execute(queryString);
  • 해커가 userName을 아래와 같이 조작한다:
'; delete from table1; select * from table1 where a='
  • 결과적으로 queryString은 아래처럼 변형된다:
select * from t1 where a=''; delete from table1; select * from table1 where a=''
  • 기존의 질의 구문을 무효화하고, 테이블을 삭제시킨다.
    → 해커가 원하는 질의 구문을 실행하도록 할 수 있다.

✅ 해결 방법: 매개변수화된 질의 구문

DbCommand cmd = new DbCommand(db);
cmd.Parameters[0] = userName;
cmd.Execute("select * from table1 where a=?");
  • 데이터베이스 연결 모듈은 매개변수화된 질의 구문 실행 기능을 갖고 있다.
  • 7.10에서 보았던 파라미터를 사용하는 방식으로 인젝션을 방지할 수 있다.

GameServer 카테고리 내 다른 글 보러가기

댓글남기기