[게임 서버] 7.11 보안을 위한 주의 사항
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 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에서 보았던 파라미터를 사용하는 방식으로 인젝션을 방지할 수 있다.
댓글남기기