필자는 Encoding::FixLatin Perl 모듈을 수정하여 과도한 UTF-8 바이트 시퀀스를 처리하고이를 가장 짧은 일반 형식으로 변환했습니다.UTF-8 문자열을 가장 짧은 일반 형식으로 변환해야합니까?
내 질문에 "이 나쁜 생각입니까?"입니다.
많은 소스 (this RFC 포함)는 긴 길이의 UTF-8은 오류로 간주되어 거부되어야한다고 제안합니다. 그들은 "순진 구현"에주의하고 이러한 것들이 본질적으로 안전하지 않다는 인상을받습니다.
내 모듈의 목적이 혼합 된 인코딩으로 지저분한 데이터 파일을 정리하고 멋진 깨끗한 utf8로 변환하기 때문에 응용 프로그램 계층을 처리 할 필요가 없도록 정리할 수있는 한 가지 더있는 것처럼 보입니다. 그것으로. 내 코드는 결과적인 문자가 가질 수있는 의미 론적 의미와 관련이 없으며 단순히 정규화 된 형식으로 변환합니다.
뭔가 누락되었습니다. 내가 고려하지 않은 숨겨진 위험이 있습니까?
을 오류를 통지하지 않습니다 것을 알고 난 당신의 논리를 따르지 않는 두려워 .내 모듈은 응용 프로그램이 아니며 데이터 필터입니다. 나는 본질적으로 '
나는 이것이 보안 또는 유용성 관점에서 나쁜 생각이라고 생각하지 않습니다.
보안 관점에서 사용자는 사용하기 전에 사용자 입력을 암호화해야합니다. 따라서 정리 루틴을 실행 한 다음 데이터가 인쇄되기 전에보다 큰 /보다 작은 기호
<>
을 포함하지 않는지 확인하십시오. 또한 데이터베이스에 삽입하기 전에 mysql_real_escape_string()을 호출해야한다. GBK와 Latin1 같은 언어 인코딩 문제는 mysql_real_escape_string()을 사용하지 않을 때 sql injection으로 이어질 수 있습니다. (이 함수 이름은 플랫폼에 특정한 mysql 라이브러리 바인딩에 관계없이 꽤 비슷해야합니다.)모든 사용자 입력을 살균하는 것은 특정 변수의 사용법을 모르기 때문에 일반적으로 끔찍한 생각입니다. 예를 들어 sql injection과 xss에는 매우 다른 제어 문자가 포함되어 있으며 두 가지 모두에 대해 동일한 민감도가 종종 취약성을 유발합니다.
출처
2010-04-30 22:22:44 rook
시나리오에서 나쁜 생각인지는 모르겠지만 이런 종류의 변화가 전체적인 것이 아니기 때문에 데이터가 손실 될 수 있습니다.
데이터 인코딩을 잘못 감지 한 경우 데이터를 합법적 인 UTF-8 오버롱으로 해석하고 가장 짧은 일반 형식으로 변경할 수 있습니다. 나중에 원래 데이터를 검색 할 방법이 없습니다.
는 개인적인 경험으로, 나는 그런 일이 발생할 수 있습니다 때 너무 늦기 전에, 그들은 당신이 잠재적으로 ...
출처
2010-05-03 11:49:11 dodecaplex
답변 해 주셔서 감사합니다. 알려진 단일 바이트 인코딩에서 UTF-8로 변환하는 것과 별개로 설명하는 상황을 처리 할 수있는 안전한 방법은 없습니다.이 경우 오버런 시퀀스가 발생하지 않습니다. Encoding :: FixLatin이 차지하는 틈새는 여러 인코딩의 문자가 포함 된 데이터를 정리하는 것입니다. 사용 된 경험적 방법은 데이터 손상을 초래할 가능성이 있으며 모듈 문서는 위험을 설명합니다. –