1. 제로 너비 공간 (ZWSP)
눈에 보이지 않지만 텍스트에 영향을 줄 수 있는 특수 문자
주로 텍스트 편집이나 디지털 문서에서 보이지 않게 문자를 분리하거나, 줄바꿈을 제어하는 데 사용
2. 문제점
1. WHERE 조건이 예상대로 동작하지 않음
// admin (a + U+200B + d + U+200B + ...) 이런 식으로 매칭 실패함
SELECT * FROM users WHERE username = 'admin';
2. 데이터 중복 처리 실패
// 나중에 'abc'를 넣으면 똑같아 보이지만 실제로는 다른 값이라서 중복 체크가 안되고 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 UNION 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 = "hello"; // 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 |