ADO.NET 防止SQL注入
2024-10-09 17:35:26
规避SQL注入
如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击
如:输入Code值
p001' union select * from Info where '1'='1 //这样可以查询到所有数据,不要轻易相信用户输入的内容
防止SQL注入攻击
通用方法:可以用正则匹配掉特殊符号
推荐方法:再给命令发送SQL语句的时候分两次发送
把SQL语句拆成两块
用户输入的是一块;本身写好的是一块
第一次把CommandText里写的sql语句发过去;第二次把变量值发过去,进行匹配
例:
使列名等于一个变量名
改变量绑定参数 cmd.Parameters.AddWithValue("变量名称",变量值);
cmd.Parameters是对象里面的一个属性,返回值是一个集合
有时会用到同样的变量名 所以在绑定参数之前先清除一下cmd.Parameters.Clear();
static void Main(string[] args)
{
//接收用户输入的查询条件
Console.WriteLine("请输入要查询的汽车代号:");
string code = Console.ReadLine(); //造连接对象
SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123"); //造命令对象
SqlCommand cmd = conn.CreateCommand(); //给命令对象一条SQL语句
//使code=一个变量
cmd.CommandText = "select * from Car where Code=@code";
//cmd.CommandText = "select * from Car where Code=@code or Name=@name"; //改变量绑定参数
cmd.Parameters.Clear();//清除绑定的变量,最好每次用参数集合前写一个清除
cmd.Parameters.AddWithValue("@code",code);
//cmd.Parameters.AddWithValue("@name",name);//有多少列绑多少个 //打开连接
conn.Open(); //执行SQL语句
SqlDataReader dr = cmd.ExecuteReader(); //读取数据
if (dr.HasRows)
{
while (dr.Read())
{
Console.WriteLine(dr[] + "--" + dr[]);
}
}
else
{
Console.WriteLine("没有查到相应的数据");
} //关闭连接
conn.Close(); Console.ReadLine();
}
最新文章
- Maven日常 —— 你应该知道的一二三
- Python 3.6.0的sqlite3模块无法执行VACUUM语句
- 安卓App和java通信实例
- Android ViewHolder的作用与用法
- 解析php开发中的中文编码问题
- (转)Mongodb相对于关系型数据库的优缺点
- CSS3 变形小结
- oracle 11g常用命令
- iOS tableView移除某一行的分割线 让分割线宽度为整个cell的宽度
- 开源社交系统ThinkSNS v4.6.1更新日志及功能详解!
- tensorflow笔记(二)之构造一个简单的神经网络
- File System 之本地文件系统
- python库termcolor用法
- app测试中隐藏键盘
- 在 Visual Studio 中使用 IntelliTrace 快照功能
- Array Queries CodeForces - 797E
- jquery实现分页+单删批删
- Javaweb学习(二):Http通信协议
- Oozie workflow工作流action间参数传递实现
- 【timeisprecious】【JavaScript 】JavaScript String 对象