
PHP 터져 나가는 거 보면서 진짜 뒷통수에서 식은 땀 흐르는 중.
사실 이 블로그 엔진을 만들기 전, 잠시 워드프레스 쓸까 고민하면서 PHP라도 공부해야 하나 진지하게 머리 싸맸던 기억이 난다.
워드프레스 특유의 무거움이나 특히나 커스터마이징이 사실상 불가능한 구조가 마음에 안 들기도 했고. 그때 그냥 직접 만들기를 잘했다 싶다.
1. PHP 불타는 중
PHP 코어 단에서 메모리 관리 터지면서 인증도 필요 없는 RCE(CVE-2026-109618 등) 터짐.
PHP-FPM이나 mod_php 쓰는 서버들은 앱 코드 실행되기도 전에 털리는 구조라 특히나 아직 패치도 없는 7.x 계열 쓰는 곳들은 답도 없는 상태.
남 일이긴 한데, 트래커 올라오는 거 보면 내가 다 어지러움.
2. 그럼 Node는 안전한가? (SKBE는 사실 Node도 아님)
"그럼 Node는 안전한가?" 싶어서 생각을 이어가려다 문득 깨달았다.
애초에 내가 올린 건 순정 Node.js 환경도 아니고 Cloudflare Pages의 nodejs_compat(호환 모드)이다. 전통적인 Node 런타임이랑도 결이 아예 다름.
생각해 보면 개발할 때 순정 Node 기능이나 라이브러리 호환 안 돼서 엄청 삽질했던 기억이 생생한데...
이쯤 되면 그때의 고생이 보안 관점에서는 오히려 득이었나 싶기도 하다.
애초에 리눅스 서버에 직접 인스턴스 띄우는 구조가 아니라 CFP 엣지의 V8 샌드박스 위에서 도는 거라, 털려도 안에서 곱게 찌그러져 있을 수밖에 없음.
최악의 상황이 DB삭제인데 이건 백업/복원 구조를 쉽게 만들어놨으니 유저가 백업만 잘해두면 문제 없을거임.
3. SvelteKit Blog Engine의 구조
보안을 대단하게 챙겼다기보다는, 스스로 보안관련 지식이 적다고 판단해서 그냥 공격 표면(Attack Surface) 자체를 물리적으로 줄여버림.
DB 쓰기 기능 무(無): 블로그 본체엔 CUD(Create, Update, Delete) 로직이 아예 없다. 오직 Read뿐이라 털려도 바꿀 데이터가 없음.
관리자 모드 격리: 블로그/관리자 페이지를 아예 따로 배포했고, 배포시 자동 주입된 지정 IP가 아니면 라우팅 단에서 접근 자체를 막아둠.
댓글/방명록: 유일한 쓰기 창구인데 MD나 HTML 파싱은 안 함. 오직 Raw String만 받아서 프론트에서도 Text Node로만 박히게 처리함. Stored XSS를 시도해 봤자 스크립트 태그가 예쁘게 문자열 그대로 화면에 렌더링됨.
나의 무지함을 알았기에 처음부터 지킬 게 없도록 만들었더니 마음이 편하다.
애초에 아무도 오지 않으니 더 적적하고 편하네.
난 그렇게 아무도 오지 않는 털기 힘든 블로그 엔진을 만들었다.(흑흑)
댓글 0개
댓글을 작성하려면 로그인이 필요합니다.