오류

[SQL] 제로 너비 공간

obin01 2025. 4. 26. 00:47

1. 제로 너비 공간 (ZWSP)

눈에 보이지 않지만 텍스트에 영향을 줄 수 있는 특수 문자

주로 텍스트 편집이나 디지털 문서에서 보이지 않게 문자를 분리하거나, 줄바꿈을 제어하는 데 사용

 

2. 문제점

1. WHERE 조건이 예상대로 동작하지 않음

// a‍d‍m‍i‍n (a + U+200B + d + U+200B + ...) 이런 식으로 매칭 실패함
SELECT * FROM users WHERE username = 'admin';

 

2. 데이터 중복 처리 실패

// 나중에 'a‍b‍c'를 넣으면 똑같아 보이지만 실제로는 다른 값이라서 중복 체크가 안되고 insert됨
INSERT INTO table (value) VALUES ('abc');

 

3. 보안 문제 (SQL Injection 우회)

// UNION 차단에 걸리는 쿼리
SELECT * FROM users WHERE id = 1 UNION SELECT username, password FROM admin;
// 중간에 U+200B 가 삽입되어 우회되는 쿼리
SELECT * FROM users WHERE id = 1 UNI​ON SELECT username, password FROM admin;

 

3. 해결방법

1. U+200B 제거 후 비교 (MSSQL)

-- U+200B 제거 후 비교
SELECT * FROM users WHERE REPLACE(username, NCHAR(8203), '') = 'admin';

 

2. javascript 에서 제거 후 전달

function removeZeroWidthChars(str) {
     return str.replace(/[\u200B\u200C\u200D\uFEFF]/g, '');
}

// 사용 예시
const userInput = "he​l​lo"; // U+200B 포함
const cleanInput = removeZeroWidthChars(userInput);
console.log(cleanInput); // → "hello"

 

3. java 에서 제거 후 전달

public class TextSanitizer {
    public static String removeZeroWidthChars(String input) {
        if (input == null) return null;
        return input.replaceAll("[\\u200B\\u200C\\u200D\\uFEFF]", "");
    }
}

 

'오류' 카테고리의 다른 글

[Redis] Redis연동 - 이슈 정리  (0) 2025.02.13
[Spring] Oauth 연동 - 이슈 정리  (1) 2025.01.17
[Error] React-Native 설치 오류 정리  (0) 2023.10.06
[Error] Tibero-1067 오류 정리  (0) 2022.09.16
[Error] Spring Boot 오류 정리  (1) 2022.09.08