parameters参数化SQL语句放注入

java1065141089 2013-05-07 09:41:57
public int AdminLogin(string AdminName, string AdminPwa)
{
string ConnectionString = ConfigurationManager.ConnectionStrings["DaDingDB"].ConnectionString;
SqlConnection conn = new SqlConnection(ConnectionString);
StringBuilder strSql = new StringBuilder();
strSql.Append("select va_AdminID from ");
strSql.Append(" AdminInformation ");
strSql.Append("where va_AdminAccount=@AdminName");
strSql.Append(" and ");
strSql.Append(" va_AdminPwa=@AdminPwa ");

SqlParameter[] parameters = {
new SqlParameter("@AdminName", SqlDbType.NVarChar,50),
new SqlParameter("@AdminPwa", SqlDbType.NVarChar,50)
};
parameters[0].Value = AdminName;
parameters[1].Value = AdminPwa;
conn.Open();
SqlCommand comm = new SqlCommand(strSql.ToString(), conn);

int rdr =Convert.ToInt32(comm.ExecuteScalar());
return rdr;
}

这样写还少啦什么吗?运行会报错
...全文
310 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delta 2013-05-08
  • 打赏
  • 举报
回复
路过,看看,看来有人已经解决了。。。。。
laowang134 2013-05-07
  • 打赏
  • 举报
回复
SqlCommand comm = new SqlCommand(strSql.ToString(), conn); cmd.Parameters.Add(parameters); int rdr =Convert.ToInt32(comm.ExecuteScalar());
xuan.ye 2013-05-07
  • 打赏
  • 举报
回复
引用 14 楼 java1065141089 的回复:
引用 12 楼 yeness 的回复:
还没等注入呢,代码就又开始重构了
什么意思?不懂
使用基于参数化的数据访问,为了防止sql注入,而业务又经常变,每次写的代码太多太累
Hi幸福来敲门 2013-05-07
  • 打赏
  • 举报
回复
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 17 楼 ediyal 的回复:
说实话,你没用存储过程,就不要用@变量~~~~
为什么啊?看别人也是这样写的啊
tudiy 2013-05-07
  • 打赏
  • 举报
回复
说实话,你没用存储过程,就不要用@变量~~~~
tudiy 2013-05-07
  • 打赏
  • 举报
回复
引用 15 楼 ediyal 的回复:
 public int admin_login(string name, string pwd)
        {
            SqlParameter[] parameters = {
new SqlParameter("@Name", name),
new SqlParameter("@Pwa", pwd)
                                        };
            parameters[0].Value = name;
            parameters[1].Value = pwd;
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select id from ");
            strSql.Append(" T_Agent ");
            strSql.Append("where username=");
            strSql.Append(parameters[0].Value);
            strSql.Append(" and ");
            strSql.Append(" password= ");
            strSql.Append(parameters[1].Value);
           
            conn.Open();
            SqlCommand com = new SqlCommand(strSql.ToString(), conn);
            int rdr = Convert.ToInt32(com.ExecuteScalar());
            return rdr;
        }
根据你的代码貌似只能这样改,try
对应的表名你改一下 。。。。忘记改了
tudiy 2013-05-07
  • 打赏
  • 举报
回复
 public int admin_login(string name, string pwd)
        {
            SqlParameter[] parameters = {
new SqlParameter("@Name", name),
new SqlParameter("@Pwa", pwd)
                                        };
            parameters[0].Value = name;
            parameters[1].Value = pwd;
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select id from ");
            strSql.Append(" T_Agent ");
            strSql.Append("where username=");
            strSql.Append(parameters[0].Value);
            strSql.Append(" and ");
            strSql.Append(" password= ");
            strSql.Append(parameters[1].Value);
           
            conn.Open();
            SqlCommand com = new SqlCommand(strSql.ToString(), conn);
            int rdr = Convert.ToInt32(com.ExecuteScalar());
            return rdr;
        }
根据你的代码貌似只能这样改,try
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 12 楼 yeness 的回复:
还没等注入呢,代码就又开始重构了
什么意思?不懂
md5e 2013-05-07
  • 打赏
  • 举报
回复
public bool ExecuteUpdate(string strSql,string[] strParams,object[] strValues) { try { this.conn.open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = this.conn; if ((strParams != null) && (strParams.Length != strValues.Length)) throw new Exception("查询参数和值不对应!"); cmd.CommandText = strSql; cmd.CommandType = CommandType.Text; if (strParams != null) { for (int i = 0; i < strParams.Length; i++) { SqlParameter param = new SqlParameter(strParams[i], strValues[i]); cmd.Parameters.Add(param); } } return cmd.ExecuteNonQuery() > 0; } catch { return false; } finally { this.conn.Close(); } }
xuan.ye 2013-05-07
  • 打赏
  • 举报
回复
还没等注入呢,代码就又开始重构了
xuan.ye 2013-05-07
  • 打赏
  • 举报
回复
忘记什么注入吧,实现了就行
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 9 楼 liuchaolin 的回复:
[quote=引用 8 楼 java1065141089 的回复:] [quote=引用 5 楼 liuchaolin 的回复:] cmd.Connection=conn; comm.CommandText = strSql; comm.CommandType = CommandType.Text; comm.Parameters=parameters
最后那行不能用,有错,提示属性或索引是只读的 不能赋值[/quote] comm.Parameters.AddRange(parameters)[/quote]还是不行!可以写个简单的实列给我看下吗?
md5e 2013-05-07
  • 打赏
  • 举报
回复
引用 8 楼 java1065141089 的回复:
[quote=引用 5 楼 liuchaolin 的回复:] cmd.Connection=conn; comm.CommandText = strSql; comm.CommandType = CommandType.Text; comm.Parameters=parameters
最后那行不能用,有错,提示属性或索引是只读的 不能赋值[/quote] comm.Parameters.AddRange(parameters)
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 5 楼 liuchaolin 的回复:
cmd.Connection=conn; comm.CommandText = strSql; comm.CommandType = CommandType.Text; comm.Parameters=parameters
最后那行不能用,有错,提示属性或索引是只读的 不能赋值
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 4 楼 ediyal 的回复:
什么错误提示?
必须声明标量变量@AdminName
java1065141089 2013-05-07
  • 打赏
  • 举报
回复
引用 1 楼 nice_fish 的回复:
报什么错?
必须声明标量变量@AdminName
md5e 2013-05-07
  • 打赏
  • 举报
回复
cmd.Connection=conn; comm.CommandText = strSql; comm.CommandType = CommandType.Text; comm.Parameters=parameters
tudiy 2013-05-07
  • 打赏
  • 举报
回复
什么错误提示?
City_member 2013-05-07
  • 打赏
  • 举报
回复
什么错误呢?
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧