2012-04-04 7 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ではなく、Unicode文字):何がこのような状況で発生したいと思います。

上記の結果は、<(通常の左括弧文字)になります。これがバグだと言いたい場合は、の結果がであると言わなければなりません。

2

これはバグではなく機能です(ただし、使用できません)。

記事のポイントは、「<」を含む文字列を投稿する場合は、各<を<(UnicodeコードポイントFF1C)に変換して検証エラーを回避します。

SQL Serverは<を含むUnicode文字列を受け取り、処理しようとします。テーブル列またはプロシージャパラメータのデータ型がUnicode対応(NCHAR、NVARCHAR、1文字あたり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

関連する問題