用参数的形式防止注入漏洞

本文讨论了如何在.NET中避免SQL注入漏洞攻击,通过使用参数而非直接字符串拼接方式来构建SQL语句,从而确保数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在判断用户登录时如果用了string.format字符串拼接的方式,用户有可能通过相应的拼接,去注视掉要求验证的代码;这样就有了漏洞;然而在net中通过参数的方式(本质是存储过程对这样的行为进行防范;)

protected void Button1_Click(object sender, EventArgs e)
{
string constr = "data source=.;initial catalog=UserDB1;User id=sa;password=admin";
using(SqlConnection con=new SqlConnection(constr))
{
// string sql = string.Format("select count(*) from T_Users where FuserName='{0}' and Fpassword='{1}'",txtUserName.Text.Trim(),txtPassword.Text);
//以上这种拼接sql语句的方法有sql注入漏洞攻击的问题 jk' or 1=1 --
//如果避免注入漏洞攻击呢?使用参数的方法或存储过程的方法

string sql = "select count(*) from T_Users where FuserName=@username and Fpassword=@password";


using (SqlCommand cmd=new SqlCommand(sql,con))
{
con.Open();
//在数据服务器端执行sql语句前需要告诉它@username,@password是谁。
//cmd.Parameters.AddWithValue("@username", txtUserName.Text.Trim());

//cmd.Parameters.AddWithValue("@password", txtPassword.Text);

//每一个参数都是一个参数对象

//SqlParameter p1 = new SqlParameter("@username", txtUserName.Text.Trim());
//cmd.Parameters.Add(p1);

//SqlParameter p2 = new SqlParameter("@password", txtPassword.Text);
//cmd.Parameters.Add(p2);

//很多情况下参数的个数很多p1.....p9

SqlParameter[] pms = new SqlParameter[] {

new SqlParameter("@username", txtUserName.Text.Trim()),
new SqlParameter("@password", txtPassword.Text)
};

cmd.Parameters.AddRange(pms);


//通过监视发现,ADO的参数替换的方法避免了注入漏洞攻击,它通过一个存储过程实现了把输入的任何字串作为字串处理的形式。
//exec sp_executesql N'select count(*) from T_Users where FuserName=@username and Fpassword=@password',N'@username nvarchar(13),@password nvarchar(4)',@username=N'jk'' or 1=1 --',@password=N'sfds'
//在sql中,把’单引号转意为字符串的方法是前面再加一个单引号。

//在sql中的参数都是以@开始的,
int r=Convert.ToInt32(cmd.ExecuteScalar());//把sql语句送到数据服务器端执行

con.Close();//可以提前关闭链接,提高效率。
if (r > 0)
{
Response.Write("登陆成功!");
}
else
{
Response.Write("登陆失败!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值