CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

使用存储过程会不会被注入?

楼主lshlfyf()2006-06-01 14:50:02 在 .NET技术 / C# 提问

using   System;  
  using   System.Data;  
  using   System.Configuration;  
  using   System.Collections;  
  using   System.Web;  
  using   System.Web.Security;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Web.UI.WebControls.WebParts;  
  using   System.Web.UI.HtmlControls;  
  using   System.Data.SqlClient;  
   
  public   partial   class   login   :   System.Web.UI.UserControl  
  {  
          protected   void   Page_Load(object   sender,   EventArgs   e)  
          {  
   
          }  
          protected   void   Button1_Click(object   sender,   EventArgs   e)  
          {  
                  if   (Request.Cookies["CheckCode"]   ==   null)  
                  {  
                          lmessage.Text   =   "您的浏览器设置已被禁用   Cookies,您必须设置浏览器允许使用   Cookies   选项后才能使用本系统。";  
                          lmessage.Visible   =   true;  
                          return;  
                  }  
   
                  //判断输入校验码是否正确  
                  if   (String.Compare(Request.Cookies["CheckCode"].Value,   TextBox3.Text,   true)   !=   0)  
                  {  
                          lmessage.Text   =   "验证码错误!";  
                          lmessage.Visible   =   true;  
                          return;  
                  }  
                  string   name;  
                  name   =   tbusername.Text.ToString();  
                  string   connStr   =   "data   source=localhost;user   id=pecc;password=pecc;initial   catalog=pecc";  
                  SqlConnection   conn   =   new   SqlConnection(connStr);  
   
                  //为执行存储过程作准备,参数赋值  
                  SqlCommand   cmd   =   new   SqlCommand("UserLogin",   conn);  
                  cmd.CommandType   =   CommandType.StoredProcedure;  
                  cmd.Parameters.Add("@username",   tbusername.Text);  
                  cmd.Parameters.Add("@password",   tbpassword.Text);  
                    //存储过程返回值  
                  SqlParameter   paramOut   =   cmd.Parameters.Add("@RETURN_VALUE",   "");  
                  paramOut.Direction   =   ParameterDirection.ReturnValue;  
   
                  try  
                  {  
                          //打开数据连接  
                          conn.Open();  
   
                          //执行存储过程,添加用户  
                          cmd.ExecuteNonQuery();  
   
                          //根据返回值判断用户是否添加成功  
                          if   ((int)cmd.Parameters["@RETURN_VALUE"].Value   ==1)  
                          {  
                                  Session["username"]   =   tbusername.Text;  
                                  Response.Redirect("default.aspx");  
                          }  
                          else  
                          {  
                                  //Response.Write("<h3   align=center>"+name+"     用户名或密码错误!</h3>");  
                                  lmessage.Text   =   "用户名或密码错误!";    
                          }  
   
                           
                  }  
                  catch   (SqlException   ex)   //数据访问异常  
                  {  
                          Response.Write("数据库访问错误!\n");  
                          Response.Write(ex.Message);  
                  }  
                  catch   (Exception   ex)     //其他异常  
                  {  
                          Response.Write("错误!\n");  
                          Response.Write(ex.Message);  
                  }  
                  finally  
                  {  
                          //最后关闭数据连接  
                          conn.Close();  
                  }  
          }  
  }  
  问题点数:20、回复次数:3Top

1 楼lovebanyi(风云)回复于 2006-06-01 15:16:18 得分 7

你这样写不会..但有的存储过程的写法也是有可能被注入  
   
  Top

2 楼chenyuming2004(这辈子我算是废了)回复于 2006-06-01 15:46:57 得分 7

使用参数化后,基本上杜绝了Sql注入的可能.  
   
  有可能最好明确给出参数字段的长度,  
   
  如   username   varcahr(20)Top

3 楼int64(@163.com:所有的程序员都应该团结起来!)回复于 2006-06-01 16:50:57 得分 6

那我这样写呢,应该不会被注入吧  
   
   
   
  public   DataSet   GetUserList(int   aID,int   uID,string   uLoginName)      
  {//列出用户。  
  SqlParameter[]   parameters   =   {  
  new   SqlParameter("@aID",   SqlDbType.Int,   4),  
  new   SqlParameter("@uID",   SqlDbType.Int,   4),  
  new   SqlParameter("@uLoginName",   SqlDbType.VarChar,   50)  
  };  
  parameters[0].Value   =   aID;  
  parameters[1].Value   =   uID;  
  parameters[2].Value   =   uLoginName;  
  Runpr   xxx=new   Runpr();  
  return   xxx.RunProcedure("usp_GetUserList",   parameters,   "tb_User");  
  }Top

相关问题

关键词

得分解答快速导航

  • 帖主:lshlfyf
  • lovebanyi
  • chenyuming2004
  • int64

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo