当前位置:编程学习 > asp >>

asp+sql 如何有效的防止sql注入

追问:您说那个写个固定函数代替 request 这个是要从开发站的时候写好对吧。 我现在站已经开发完了。之前的就是字段什么的都写的很简单。 如今也没有充分的时间重新开发。 只能添加一些限制。 昨天我百度了好久 说在conn里面加限制。我加上了 报错?!老大你贴这代码 怎么用?
答案:SQL注入,一般由 request 提交而来,所以过滤 request参数即可。
比如,正常获取 id 为 request("id") ,获取后,对其进行强制转为int型,如
id = cint(request.querystring("id"))
同理,凡是数字型的,一律进行判断是否数字或强制转换。
如果是字符型的,要写入SQL语句的,一律对单引号进行转义,如
SQLserver和Access中,替换成两个单引号。MYSQL中替换成 \' 等。
可以写成一个固定的函数来代替request,可以达到防止注入的目的。
网上也有一些通用的过滤程序,可以解决大部分问题,但更多的时候,也并不能防止注入的发生,同时,也会给正常提交带来一些麻烦。
其他:问题补充:插入以后还是无法防止sql注入,麻烦检查下代码是否有效!!! Then Response.redirect 首先过滤关键字
 ///
  /// </summary>
  /// <param name="text">用户输入的文字</param>
  /// <param name="maxlength">最大的长度</param>
  /// <returns>返回验证后的文字</returns>
  public static string InputText(string text, int maxlength)
  {
  text = text.ToLower().Trim();
  if (string.IsNullOrEmpty(text))
  return string.Empty;
  if (text.Length > maxlength)
  text = text.Substring(0, maxlength);

  text = Regex.Replace(text, "[\\s]{2,{", " ");
  text = Regex.Replace(text, "(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?>)", "\n"); //<br>
  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 = Regex.Replace(text,"=", "");
  text = Regex.Replace(text, "%", "");
  text = Regex.Replace(text, "'", "");
  text = Regex.Replace(text, "select", "");
  text = Regex.Replace(text, "insert", "");
  text = Regex.Replace(text, "delete", "");
  text = Regex.Replace(text, "or", "");
  text = Regex.Replace(text, "exec", "");
  text = Regex.Replace(text, "--", "");
  text = Regex.Replace(text, "and", "");
  text = Regex.Replace(text, "where", "");
  text = Regex.Replace(text, "update", "");
  text = Regex.Replace(text, "script", "");
  text = Regex.Replace(text, "iframe", "");
  text = Regex.Replace(text, "master", "");
  text = Regex.Replace(text, "exec", "");
  text = Regex.Replace(text, "<", "");
  text = Regex.Replace(text, ">", "");
  text = Regex.Replace(text, "\r\n", "");

  return text;
  }
另外不要用SQL拼接字符穿,用SqlParameter传参数
例如:        public static DataTable SearchAccessPlanByTaskId(string taskId)
        {
            try
            {
                string sql = "select * from C_VisitPlan where TaskID=@taskId";
                SQLiteParameter[] sp = {
                   new SQLiteParameter("@taskId",taskId)
                };
                clsSqLiteInstance sqlinst = new clsSqLiteInstance("MainChanged.db");
                return sqlinst.GetDataTable(sql, sp);
            }
            catch (Exception ex)
            {
                return null;
            }
        } 这属于网站程序安全,建议找专业做服务器安全和网站安全的来给你解决把。sinesafe不错。

上一个:asp如何实现页面导入
下一个:asp 注释

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,