在写asp.net的代码的时候必然要跟数据库打交道,因此要特别注意这方面的安全,今天随便写写如此防护 倘若我们设计SQL查询字符中如下: string sql="select * from userinfo whre usertext="+pu+"and userpass="+pw; 我们这里的userinfo是表名,而pu保存用户名,pw保存的是密码 如果,你们这么写那么用户就可能通过输入登录信息来欺骗服务器的验证 如果用户在输入密码的那里加上"or1=1就可以直接饶过密码验证 那么我们通过获取文本框的文本进行发送 那么数据库接收的语句将是: string sql="select * from userinfo where usertext="" or1=1 and userpass=""or1=1; 我们知道1=1是一个恒等式,那么这个验证就形成一个无条件的查询,所以我自然而然可以通过服务器的验证了 防止脚本注入 我直接把我写的发送上来,其实无非就是检查你的接受的表单进行判断如果有,<、〉、”等特殊字符时就进行编码替换 在前面我们加上using System.Text;这个命名空间 public static string Clearstr(string inputstring, int maxLength) { StringBuilder retVal = new StringBuilder();//实例化一个stringBuilder对象 if ((inputstring != null) && (inputstring != string.Empty)) { inputstring = inputstring.Trim(); if (inputstring.Length > maxLength) { inputstring = inputstring.Substring(0, maxLength);//进行长度检查 }
for (int i = 0; i < inputstring.Length; i++) { switch (inputstring[i]) { case '"': retVal.Append("""); break; case '<': retVal.Append("<"); break; case '>': retVal.Append(">"); break; default: retVal.Append(inputstring[i]); break; } } retVal.Replace("'", "''"); } return retVal.ToString(); } 我们就可以在自己的登录文件中引用这个函数 格式为:pu=clearstr(TextBox_usertext.Text,20);//TextBox_usertext.Text是用户输入的用户名文本框,20是最大可输入字符数 pw=Clearstr(TextBox-userpass.Text,20);是用户输入的密码文本框 这样就可以实现替换危险字符了 |