제30회: P2P 시그널링 서버 보호! 문의 양식 및 WebSocket 연결에 대한 BOT 방어
요약
본 글은 게시판 본체 외에 '문의 양식'과 'P2P 시그널링 API' 등 사각지대에 대한 봇 방어 대책을 설명합니다. 문의 모달 내 더미 입력란 배치, 스팸 및 무효 요청 차단 로직 등을 통해 시스템의 보안성을 강화했습니다. 또한, P2P 채팅에서 나중에 입장한 사용자의 로그 공유 문제를 제기하며 다음 개발 과제를 예고하고 있습니다.
핵심 포인트
- 문의 양식에 더미 필드를 추가하여 봇 자동 입력을 방지함.
- 스팸/무효 요청을 차단하는 로직(400 Bad Request)을 구현함.
- P2P 시그널링 API의 DoS 공격 및 무효 전송을 막는 보안 장치를 마련함.
- 향후 과제: P2P 채팅에서 후발 주자의 로그 공유 문제 해결 방안 모색.
안녕하세요! 2채널 호환 게시판 시스템 「つゔぁいちゃんねる (2ch.biz)」 개발 기록 제30회입니다.
제10회부터 제14회까지, 저희는 게시판 작성 양식에 대해 철저한 보안 대책(토큰 버킷 방식 Rate Limit, 허니팟, 해외 IP 차단, 무차별 대입 공격 방어)을 적용했습니다. 게시판 본체 자체의 트롤링 방지에는 만전이라고 생각했습니다.
하지만 서비스를 운영하다 보면, 공격자는 항상 '대책이 미흡한 뒷문(裏口)' 을 찾아내 침투해 옵니다.
이번에 표적이 된 곳은 새로 신설된 '문의 양식' 과, 제28회에서 도입한 'P2P 암호화 채팅의 시그널링 API' 였습니다. 본고에서는 이 사각지대였던 두 개의 주요 엔드포인트를 봇의 손아귀로부터 보호하기 위해 마련한 보안 방벽의 전모를 설명합니다.
보안이 강화된 시스템에서 공격자는 가장 방어력이 약한 곳으로 이동합니다.
제20회에 푸터에 문의 모달을 설치하자, 해외 자동 크롤러 봇들이 이를 감지하여 수상한 광고 링크나 피싱 URL을 포함한 스팸 문의가 하루 수백 건 단위로 도착하기 시작했습니다.
제28회에는 '서버에 로그를 남기지 않는' P2P 채팅을 공개했지만, 참여자들끼리 매칭하기 위한 시그널링 API(/api/p2p/join나 /api/p2p/signal)는 서버에서 작동하고 있습니다.
봇이 자동 스크립트로 수만 건의 유령 방(幽霊ルーム)을 남발하거나, 무효한 SDP 시그널을 연속 전송함으로써, 시그널링 서버의 인메모리 맵을 압박하여 서비스 중단(DoS)을 노리는 공격이 발생했습니다.
사람 눈에는 전혀 보이지 않지만, HTML 코드를 스캔하여 자동 입력하는 봇만이 값을 넣게 만드는 더미 입력란(hp_website)을 문의 모달 내부에 배치했습니다.
<!-- index.html: 문의 모달 -->
<form id=
테스트 항목 | 전송 파라미터 | 기대하는 상태 | 판정 |
|---|---|---|---|
일반 문의 | 정상값, `hp_website: ""` | `200 OK` (전송 성공) | ✅ PASS |
BOT에 의한 문의 | 스팸문, `hp_website: "http://bot-promo.xyz"` | `400 Bad Request` (자동 차단) | ✅ PASS |
규제 IP로부터의 문의 | BAN된 IP로부터의 요청 | `403 Forbidden` (즉시 차단) | ✅ PASS |
일반적인 P2P 룸 생성 | 정상값, `hp_website: ""` | `200 OK` (방 생성 성공) | ✅ PASS |
BOT에 의한 P2P 시그널링 | 스크립트 자동 전송, `hp_website: "evil"` | `400 Bad Request` (무효화) | ✅ PASS |
P2P 채팅 내 0.2초 연속 전송 | 200ms 간격에서의 Enter 키 연타 | 전송 억제 & 토스트 경고 | ✅ PASS |
아무리 견고한 성벽을 쌓는다 하더라도, 뒷문이 열려 있다면 시스템은 쉽게 침입 및 파괴될 수 있습니다.
게시판 본체뿐만 아니라, 문의 양식이나 P2P 시그널링 API, 채팅룸 내 클라이언트 동작에까지 봇 대책을 펼쳐서 견고한 운영 체제가 완성되었습니다.
하지만, P2P 채팅을 운영해 나가는 과정에서 다음에 직면한 것이 **'나중에 입장한 사용자의 고립 문제'**였습니다.
중앙 서버에 로그가 없기 때문에, 대화 도중에 들어온 사용자는 새하얀 화면부터 시작하게 되어, **'지금 무슨 이야기를 하고 있는지 전혀 알 수 없다!'**는 상황에 빠지게 됩니다.
서버를 거치지 않고, 피어(peer)끼리 자율적으로 과거 로그를 공유하려면 어떻게 해야 할까요?
실제 서비스: https://2ch.biz/
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기