我正在读这个article http://software-security.sans.org/blog/2011/07/22/bypassing-validaterequest-in-asp-net。它说 :
该字符用值 %uff1c 表示。如果将此值传递给 SQL 数据库中的 varchar 字段,它将转换为真正的
好吧,我认为这是一个 SQL Server 错误,而不是 ValidateRequest hack!如果我写%uff1c
,SQL Server 必须将其另存为%uff1c
。或者,至少,它应该“再次”编码%uff1c
由管理员选择的字符。
我错了吗?
这不是一个错误,而是一个功能(但你不能使用它)。
文章的要点是:如果要发布包含“
SQL Server 收到一个包含 < 的 Unicode 字符串并尝试对其进行处理。如果表列或过程参数的数据类型启用了 Unicode(NCHAR、NVARCHAR、每个字符 2 个字节),则不会发生转换,并且 SQL Server 会存储原始值。
但是,如果将值传递到 VARCHAR(每个字符 1 个字节)列或变量,则字符
DECLARE @nv nvarchar, @v varchar
SET @nv = N'<'
SET @v = '<'
SELECT @nv, @v, CONVERT(varchar, @nv)
< < <
但是,由于现在是 21 世纪,数据库应该能够支持每种标准化语言、符号和字符,因此几乎没有什么场景可以证明使用 VARCHAR 数据是合理的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)