유니코드(Unicode) Confusables.txt와 NFKC, 슬러그 검증 시 주의점

by DD
3개월 전
조회수 10

유니코드(Unicode) Confusables.txtNFKC 정규화(Normalization) 간의 충돌로 인해 슬러그(slug) 검증 시스템에서 잠재적 오류 발생 가능

NFKC 정규화는 호환성 변형을 표준 형태로 변환하며, Confusables.txt는 시각적으로 유사한 문자를 매핑

두 표준을 함께 사용할 경우, 31개의 문자에 대해 중복 매핑(Redundant Mapping) 또는 잘못된 변환(Incorrect Conversion) 발생

NFKC-aware Confusable Map을 통해 중복 항목 제거 및 슬러그 검증 파이프라인(Pipeline) 개선 필요

Confusables.txt와 NFKC 정규화의 상충 관계

본문에서는 유니코드(Unicode)의 Confusables.txtNFKC 정규화(Normalization) 간의 충돌을 지적하며, 슬러그(slug) 검증 파이프라인(Pipeline)에서 예상치 못한 문제를 야기할 수 있다고 설명한다. 특히, Confusables.txt는 시각적 유사성을 기반으로 문자를 매핑하는 반면, NFKC 정규화는 의미론적 등가성을 기준으로 변환을 수행한다. 이러한 차이로 인해 31개의 문자에 대해 중복 매핑(Redundant Mapping) 또는 잘못된 변환(Incorrect Conversion)이 발생할 수 있다.

슬러그(Slug) 검증 시스템의 취약점

게시물에서는 슬러그(slug) 검증 시스템에서 NFKC 정규화와 Confusables.txt를 함께 사용할 때 발생할 수 있는 문제점을 구체적으로 제시한다. 예를 들어, Long S(ſ)는 Confusables.txt에 의해 'f'로 매핑되지만, NFKC 정규화에 의해 's'로 변환된다. 이러한 매핑 충돌(Mapping Conflict)은 슬러그 생성 및 검증 과정에서 오류를 발생시키며, 잠재적으로 보안 취약점(Security Vulnerability)으로 이어질 수 있다.

NFKC-aware Confusable Map 구현

저자는 이러한 문제를 해결하기 위해 NFKC-aware Confusable Map을 제안한다. 이는 Confusables.txt의 항목을 NFKC 정규화 결과와 비교하여 중복되거나 충돌하는 항목을 제거하는 방식이다. 구체적으로, NFKC 정규화 후에도 동일한 문자로 매핑되는 경우, 또는 다른 라틴 문자로 매핑되는 경우 해당 항목을 제외한다. 이를 통해 슬러그 검증 파이프라인의 정확성을 높이고, 코드 중복(Code Redundancy)을 줄일 수 있다.

파이프라인(Pipeline) 아키텍처 및 재현성

저자는 3단계 파이프라인(Three-Stage Pipeline) 아키텍처를 제시하며, 각 단계별 역할을 명확히 정의한다. 1단계는 NFKC 정규화, 2단계는 Confusable Map 적용, 3단계는 혼합 스크립트 거부(Mixed-script rejection)이다. 또한, Confusable Map을 자동으로 생성하는 스크립트를 제공하여, 유니코드(Unicode) 버전 업데이트에 따른 수동적인 업데이트의 번거로움을 해소한다. 이 스크립트는 재현 가능한(Reproducible) 슬러그 검증 시스템 구축에 기여한다.

Unicode's confusables.txt and NFKC normalization disagree on 31 characters

댓글 0

첫 번째 댓글을 남겨보세요!