首页 新闻 赞助 找找看

SqlParameter的size属性指定和不指定有什么区别?

0
悬赏园豆:20 [已解决问题] 解决于 2008-10-08 14:11

问题如上,不指定SqlParameter的size属性会造成sql注入攻击吗?请详细解释下

问题补充: 是否用了SqlParameter就不会有sql注入的危险?
来打我啊的主页 来打我啊 | 初学一级 | 园豆:182
提问于:2008-10-08 11:36
< >
分享
最佳答案
0
Code
1


1:SqlParater .size
获取或设置列中数据的最大大小(以字节为单位)。
默认值是从参数值推导出的。
比如
你传入的值是
"Robot.H"
则默认为
"Robot.H".Length


2:关于SqlInjection和这个没有必然关系。
Petshop里有个WebUtility.cs
里面有个方法
///
/// Method to make sure that user's inputs are not malicious
///
/// User's Input
/// Maximum length of input
/// The cleaned up version of the input
public static string InputText(string text, int maxLength) {
text
= text.Trim();
if (string.IsNullOrEmpty(text))
return string.Empty;
if (text.Length > maxLength)
text
= text.Substring(0, maxLength);
text
= Regex.Replace(text, "[\\s]{2,}", " "); //two or more spaces
text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)", "\n"); //

text
= Regex.Replace(text, "(\\s*&[n|N][b|B][s|S][p|P];\\s*)+", " "); //
text = Regex.Replace(text, "<(.|\\n)*?>", string.Empty); //any other tags
text = text.Replace("'", "''");
return text;
}


还有关于execute,sp_executesql的动态语句,也应该小心sqlInjection



 

roboth | 初学一级 |园豆:28 | 2008-10-08 13:49
其他回答(2)
0

没有区别,不指定的话将通过你赋的值自动计算size

比如有一个SqlParameter,其DbType为String

对基赋值parameter.Value = "abc";

那么Size自动计算得到为3

Gray Zhang | 园豆:17610 (专家六级) | 2008-10-08 12:26
0

  嗯?还是有区别的。

  因为在某些地方,这样也能有效防止数据库溢出和SQL注入的可能性。

首先还是要明确SIZE属性的概念:

设置 Size 仅影响参数的输入值。此属性不影响返回值和输出参数。

Size 属性用于二进制和字符串类型。对于 SqlType.String 类型的参数,Size 是指 Unicode 字符的长度。对于 SqlType.Xml 类型的参数,将忽略 Size

对于非字符串数据类型和 ANSI 字符串数据,Size 属性是指字节数。对于 Unicode 字符串数据,Size 指的是字符数。字符串的计数不包括终止字符。

对于可变长度数据类型,Size 描述传输给服务器的最大数据量。例如,对于一个 Unicode 字符串值,可以用 Size 将发送到服务器的数据量限制为前一百个字符。

如果未显式设置,则从指定参数值的实际大小推断出该大小。

如果参数值的小数部分大于该大小,则该值将被截断以与该大小相匹配。

对于固定长度数据类型,忽略 Size 的值。它可以被检索来提供信息,并返回在向服务器传输参数值时提供程序所使用的最大字节数。

最后,可参考这篇文章:
http://www.microsoft.com/taiwan/msdn/columns/huang_jhong_cheng/LVSS.htm 

不是此文章主要针对LINQ的,但也是差不多!

RicoRui | 园豆:3663 (老鸟四级) | 2008-10-08 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册