2012-04-04 2 views
3

나는 이것을 article으로 읽었습니다. 그것은 :ValidateRequest 오류 또는 SQL Server 버그?

그 문자는 % uff1c 값으로 표현됩니다. 이 값이 SQL 데이터베이스의 varchar 필드에 전달되면 실제 < 문자로 변환됩니다. 나는 NVARCHAR 필드

음에이 작품을 보지 못했지만, 나는 이것이하여 validateRequest 해킹은 SQL Server 버그, 아니라고 생각! %uff1c으로 작성하면 SQL Server는 %uff1c으로 저장해야합니다. 또는, 적어도 "다시"%uff1c을 인코딩해야하며, 이는 관리자가 선택합니다.

내가 틀렸어?

답변

1

SQL Server는 <varchar 필드에 <을 (를) 저장할 수 없습니다.

DECLARE @v varchar(1) 

SET @v = '<' 

SELECT @v 

(즉, <보통 왼쪽 꺾쇠 괄호 문자가 아닙니다,하지만 코드 포인트 FF1C에 오히려 유니 코드 문자) : 당신은 무엇을이 상황에서 발생하고 싶습니다.

위 결과는 < (일반적인 꺾쇠 괄호 문자)입니다. 이것이 버그라고 말하고 싶다면 의 결과가 인 결과를 말해야합니다.

2

이것은 버그는 아니지만 기능은 사용할 수 있지만 사용할 수는 없습니다.

기사의 요점은 '<'이 포함 된 문자열을 게시하려면 각 <을 <(유니 코드 코드 포인트 FF1C)로 변환하여 유효성 검사 오류가 발생하지 않도록하십시오.

SQL Server는 <를 포함하는 유니 코드 문자열을 받고 처리하려고합니다. 테이블 열 또는 프로 시저 매개 변수의 데이터 형식이 유니 코드 사용 (NCHAR, NVARCHAR, 문자 당 2 바이트) 인 경우 변환은 수행되지 않으며 SQL Server는 원래 값을 저장합니다.

그러나 값이 VARCHAR (문자 당 1 바이트) 열이나 변수로 전달되면 문자 <(2 바이트 코드 포인트)는 <으로 변환됩니다. AakashM의 코드를 확장하는 것은 설명하기 :

DECLARE @nv nvarchar, @v varchar 
SET @nv = N'<' 
SET @v = '<' 
SELECT @nv, @v, CONVERT(varchar, @nv) 

< < < 

을하지만,이 21 세기이기 때문에, 데이터베이스는 모든 표준화 된 언어와 기호와 문자를 지원할 수 있어야, VARCHAR 데이터를 사용하여 정당화 왼쪽 매우 몇 가지 시나리오가있다.

+0

+1이 기능은 XSS 공격에 상당한 영향을 미치지 만. – StuartLC