sql注入

本文介绍了一种常见的Web安全威胁——SQL注入,并提供了具体的SQL注入实例。此外,还详细讲解了如何通过参数化查询来有效防止SQL注入攻击。

sql注入实例

一、使用方法

假设有一张category表,里面有两个字段名(id,name);我们构造了一个插入函数InsertData(string caName)

1、正常的插入语句,我们只需要填写类别名称(娱乐新闻)

sql = insert into category(name) values ('娱乐新闻');

2、 通过拼接字符串的方法插入

sql = insert into category(name) values ('体育新闻')delete category where id=1--'); 其中,')delete category where id=1--是我们添加的,实现插入体育新闻并且删除id=1的类别

说明

两个减号表示注释,就将最后一个单引号注释掉了,这样起作用的的只有
insert into category(name) values ('体育新闻')delete category where id=1

二、如何避免sql注入

1、注意事项

这个问题也意味着别人能够在网站上构造SQL语句,对你的数据库进行操作,这是相当危险的。

2、解决方法

不能直接使用SQL语句,可以使用带参数的SQL语句

sql = "insert into category(name) values(@caName)"

使用方法

cmd.Parameters.Add(new SqlParameter("@caname", "测试"));

完整的注入

SqlCommand cmd = new SqlCommand("insert into category(name) values(@caName)");
cmd.Parameters.Add(new SqlParameter("@caname", "体育新闻')delete category where id=1--"));
具体事例
public int ExecuteNonQuery(string sql, SqlParameter[] paras)
{
    int res;
    using(SqlCommand cmd = new SqlCommand(sql,GetConn()))
    {
       cmd.Parameters.AddRange(paras);
       res=cmd.ExecuteNonQuery();
    }
    return res;
}

public bool Insert(string caName)
{
    bool flag=false;
    string sql="insert into category(name) values(@caName)";
    SqlParameter[] paras=new SqlParameter[]
    {
        new SqlParameter("@caName",paras);
        if(res>0)
        {
            flag=true;
        }
    }
    return flag;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值