ConnectionString容易发生类似于SQL 注入式攻击,因为攻击者可以在连接字符串中通过分号(;)来加入其它参数。 例如:连接字符串通过下面方式拼接: stirng connectionString="Server=(local);Initial Catalog=yourDatabase;User ID=username;Password="+textbox1.Text; 其中需要在textbox1中输入密码。现在假如有人输入: rightpassword;Pooling=true;Min Pool Size=999999;Max Pool Size=999999; 那么拼接后的连接字符串就是
stirng connectionString="Server=(local);Initial Catalog=yourDatabase;User ID=username;Password=rightpassword;Pooling=true;Min Pool Size=999999;Max Pool Size=999999; 现在只要连上数据库那么也许你服务器应该承受不了999999个连接池吧。 要解决这个问题,防止注入式攻击,可以用System.Data.SqlClient.SqlConnectionStringBuilder来实现。builder中的内容会整体作为值来处理。下例中password的值就是"AdventureWorks;NewValue=Bad",而不会被解析成新的参数。 Code System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); builder["Data Source"] = "(local)"; builder["integrated Security"] = true; builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad"; Console.WriteLine(builder.ConnectionString); //输出结果: data source=(local);Integrated Security=True; initial catalog="AdventureWorks;NewValue=Bad"
www.jxgzseo.cn
|