메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

문제점:

클라이언트 <-> 서버 통신을 하면서 다음과 같이 메세지를 주고받기로 함

패킷종류|파라미터1|파라미터2

 

예)

MOTDREQ -> 서버에 MOTD를 요청 (파라미터 없음)

MOTD|공지사항입니다 -> MOTD는 "공지사항입니다" 임 (파라미터 1개)

MSG|김덕배|안녕하세요 -> 닉네임이 "김덕배" 인 사용자가 "안녕하세요" 라는 메세지를 보냄

 

그런데 공지사항이나 사용자 닉네임같은 경우 사용자가 마음대로 정할 수 있는 입력값이고

따라서 닉네임을 김덕|배 같은 걸로 지으면 MSG|김덕|배|안녕하세요 이런 메세지가 보내질거고

메세지 구조가 망쳐지고 잠재적인 오류가 발생할 수 있는 가능성이 있음

 

해결방법:

구분자로 사용되는 문자를 다 걸러내고 그런 솔루션을 생각했는데

그냥 사용자한테 입력받아서 오염의 껀덕지가 있는 문자들을 Base64 등으로 인코딩해서 보내고 받을 때 디코딩하면 끝임

MSG|김덕|배|안녕하세요

->

MSG|6rmA642VfOuwsA==|7JWI64WV7ZWY7IS47JqU

 

캐릭터이름도 DB에 저장할때 캐릭터명이 '); DROP TABLE USER; -- 이따구일 경우에 DB에 저장하는 쿼리를 날릴경우 문제가 생길 수 있는데

저걸 그대로 저장하지 말고 Jyk7IERST1AgVEFCTEUgVVNFUjsgLS0= 로 저장하고 주고받고, 사용자한테 보여줄때만 복호화하면 됨

(캐릭터 이름에 사용할 수 있는 언어나 문자셋을 제한하는 건 보안상의 이유 말고 미관상의 이유로도 필요하겠지만 대충 이런방법도 있다는거임)

조회 수 :
22
등록일 :
2023.07.17
14:51:10 (*.168.186.88)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=821956

흑곰

2023.07.18
17:06:13
(*.109.221.10)

illegal character 방지와 별개로 "MSG|김덕배|안녕하세요" 에 대해 얘기해보자면 "김덕배"는 보낼 필요가 없습니다.

클라이언트가 접속할 때마다 해당 클라이언트 전용소켓이 만들어집니다.

그걸 서버에서 관리하고 있다면, 누가 보냈는지는 서버에서 알 수 있습니다.

 

보내는 사람의 이름, 보내는 사람의 ID 등을 메시지에 의존하는 것은 안전하지 않습니다.

물론 우리가 만드는 게임 수준에서 "김덕배"를 "홍길동"으로 변조해서 보낼 클라이언트는 없습니다.

 

그냥 소켓 통신에 대해서 팁을 드리고자 하는 것입니다.

만약 MAP1이라는 공간에서 x10,y10 위치에 존재하는 사용자가 오른쪽으로 한칸 이동한다면?

MOVE|RIGHT 만 보내면 됩니다.

 

그런데 MOVE|김덕배|MAP1|x10,y10|RIGHT 이렇게 보낼 건가요?

김덕배, MAP1, x10,y10 은 서버가 갖고 있어야 합니다.

클라이언트가 소켓으로 어떤 메시지를 보내건, 서버는 "응, 김덕배가 뭔가를 보냈네. 얘는 현재 MAP1에 있고, x좌표 10, y좌표 10에 있는 친구네."라고 알 수 있게 구조를 만들어야 합니다.

 

보안상으로도 안전하지만 보안상 안전하다 얘기를 하는 게 아니라,

코딩을 할때 훨씬 간결해지고 소켓 통신하는 내용도 훨씬 단순해져서

게임 개발 퍼포먼스가 올라가실 겁니다.

노루발

2023.07.19
06:57:58
(*.149.251.187)

감사합니다. 좀 더 고민해보겠습니다.

흑곰

2023.07.19
16:14:30
(*.255.218.134)

정답이 아니고 의견이니 참고만 하시면 될듯 합니다. 수고하십시오

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일sort
25 아아, 그렇다면... 흥크립트에서 [1] 장펭돌 1712   2008-02-02 2008-03-17 04:37
제가 타이틀을 만들고 나서 @마우스지원 해놓고 나니까 선택지에서 키보드로 선택할수 있는 커서가 사라지더라구요? 이건 원래 그런건지... 키보드로 선택해도 되긴 되는데 커서가 없어서 지금 뭘 고르고 있는건지 알수가 없는데.. 원래 이런건가요? 으음, 그...  
24 흥크립트, 이건 답변 안해주신듯... [1] 장펭돌 1669   2008-02-02 2008-03-17 04:37
마우스를 지원하게 하고싶은곳과 지원 안하게 하고싶은곳... 이 두곳을 어떻게 구분하죠? 저같은경우엔 특별한 경우를 제외하곤 마우스가 안나오게 할껀데... 어떻게 해야... 하는지 자세히 설명좀 부탁... ㅈㅅ.. * 똥똥배님에 의해서 게시물 이동되었습니다 ...  
23 흥크립트 질문 [1] 장펭돌 1733   2008-02-01 2008-03-17 04:37
흥크립트에서 if처럼 변수1이 1이면 어떻게되고 변수1이 2면 어떻게되고 이렇게 어떻게하나요? 역전심판에서 1+1 답 얘기할때, 정답을 말하느냐 오답을 말하느냐에 따라서 달라지는것 처럼 말이죠... 봐도 잘 모르겠네요... * 똥똥배님에 의해서 게시물 이동되...  
22 [re] 흥크립트 질문 똥똥배 1782   2008-02-01 2008-03-17 04:37
조금 복잡하지만 이렇습니다... ====================================== [분기] ([레벨]==16)?91:[분기] [분기] ([레벨]==15)?92:[분기] [분기] ([레벨]==14)?93:[분기] [분기] ([레벨]<=13)?94:[분기] @이동 [분기] ^91 당신의 랭크 : S @이동 95 ^92 당신의...  
21 클릭 문제.... ㄱ- [1] 장펭돌 1801   2008-01-31 2008-03-17 04:37
~클릭 100, 123, 0, 276, 186 @계속 ^100 이벤트 발생! 그림판에서 좌표수를 확인하고나서 123,0 부터 276,186의 위치를 위 처럼 정한뒤 흥크립트 실행후 아무리 클릭해봐도 안되네요... 또하나 궁금증은 창모드가 아닌 전체화 모드에선 마우스가 안나오는데.....  
20 흥크립트 궁금한점. [5] 장펭돌 1704   2008-01-31 2008-03-17 04:37
1. AVI 같은 동영상 파일이나, 플래시파일 재생 지원 가능한가여? 가능하다면... 뭐라 쓰면 되는지...? 2. 던전앤 러버처럼 마우스 클릭으로 실행되는 이벤트 만드는 방법 설명좀 부탁... * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:03)  
19 흥크립트 질문! [2] 네모상자 1692   2008-01-28 2008-03-17 04:37
글자변수는 조건분기가 안되나요? * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:03)  
18 흥크립트 원인불명 버그 [5] 흑곰 1891   2008-01-23 2008-03-17 04:37
마우스 클릭하다가 게임 자체가 멈춘다. 마우스 인식, 키 인식이 안되며(Alt+F4포함) 걸리면 도리가 없고, 열받아서 컴퓨터를 부숴버리고 싶어진다. 현재까지는 장펭돌, 흑곰이 걸렸다. 원인은 잘 모르겠지만 게임을 새로 시작할 때는 일어나지 않는 것 같고, ...  
17 흥크립트 버그발견 [7] 네모상자 1754   2008-01-22 2008-03-17 04:37
한 줄에서 맨 앞에 {글자변수}를 사용하면 인식하지를 않음 예) {쥔공이름} : 네, 제 이름은 {쥔공이름}입니다(인식안함) 네, 제 이름은 {쥔공이름}입니다(인식함) * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:03)  
16 흥크립트 다루다 보니 알아낸게 있는데... [4] 네모상자 1765   2008-01-18 2008-03-17 04:37
그림이 없으면 대화창이 투명해지지 않는군요. * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:03)  
15 흥크립트 반전 버그 원인발견, 그리고 그 후폭풍 [4] 똥똥배 1691   2008-01-15 2008-03-17 04:37
흥크립트의 반전버그의 원인을 알았지만, 그게 간단한 문제가 아니라 거의 시스템을 다 엎어야 할 버그란 걸 깨달았습니다. 일단 흥크립트는 원본 그림은 그대로 둔 채 DuplicateSurface란 명령으로 그림을 복사해서 씁니다. 그런데 사실 복사라고 해서 그림을...  
14 똥똥배님께 질문 [6] 흑곰 1730   2008-01-09 2008-03-17 04:37
1. 시스템메모리와 비디오메모리의 차이는 무엇입니까? 각각의 장단점은 무엇인지..? 그리고 무엇을 (주로) 사용하시는지? 2. 흥크립트는 txt파일을 한줄 읽고 처리하고, 또 한줄읽고 처리하나요? 아니면 전부 다 읽고 몇줄씩 한꺼번에 처리하나요? 3. 한줄읽...  
13 [re] 똥똥배님께 질문 [1] 똥똥배 1682   2008-01-09 2008-03-17 04:37
1. 시스템메모리와 비디오메모리의 차이는 무엇입니까? 시스템 메모리는 말 그대로 컴퓨터에 달린 RAM이고, 비디오 메모리는 비디오카드에 있는 RAM입니다. 이론적으론 비디오 메모리가 용량이 작은 대신 속도가 빠르긴 한데... 시스템 메모리에 부른 것을 비...  
12 흥크립트 또 질문 [2] A.미스릴 1712   2008-01-02 2008-03-17 04:37
@그림 0, "XX"를 했었는데 그후 나중에 @그림 0, 'YY"를 해서 그림을 바꿔버릴 수 있나요 추가로 다음버전에서 {{사람이름}체력} 형식도 사용할 수 있게 해주세요 * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:00)  
11 흥크립트배경 어떤식으로 넣어야됨? [2] 세균맨 1751   2007-12-10 2008-03-17 04:37
갈쳐주셈 그리고 그림 순서 똑같게 잡으면 뭐나옴? * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:00)  
10 흥크립트 질문 [3] A.미스릴 1729   2007-12-07 2008-03-17 04:37
마우스 커서 생겼을때 마우스 커서의 좌표를 취득할순 없나요?-0-; * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:00)  
9 흥크립트 기초 질문. [2] 장펭돌 2430   2007-12-03 2008-03-17 04:37
지금 슬슬 설명서를 읽어나가는중... 기본 원리에서 다른건 대충 전부다 이해가 가지만, 몇가지 이해가 안가는 것이 있어서 질문 합니다. 우선 그림파일은 mlc로, 텍스트 파일은 dlg로 바꾸는것이 맞지요? 그렇다면, '게임 전체적으로 쓸 그림이라면 DATA폴더...  
8 흥크립트로 만든 예제 4 file 대슬 1723   2007-12-02 2008-03-17 04:37
 
7 반복문 예제 [4] file 대슬 1833   2007-12-01 2008-03-17 04:37
 
6 흥크립트에서 반복문 실행하기 (덤추가) [9] 대슬 1790   2007-12-01 2008-03-17 04:37
[엔] 0 ^0:연산하는부분 //원하는 연산 내용을 자유롭게 적으면 됩니다. [엔] [엔]+1 ^1 [체크] ([엔]==10)?2:0 //↑[엔]의 값이 10인지 아닌지를 판별하고 10이면 [체크]에 1이, //10이 아니면 [체크]에 0이 들어갑니다. ([엔]==10)에서 10부분에 다른 수를 //...