【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类
字符串攻击
所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作

在用户输入界面输入 a');update Student set Sname ='伊伊';--
则数据库Sname一列都讲变为 伊伊
原理:用户输入的代码将c#中的sql语句中的sname替换掉了,就变成了下边的黑客想执行的sql语句。
insert into Student values('"+sno+"','a');update Student set Sname ='伊伊';--')
攻击防御
将C#中操作数据库执行的sql语句中的字符串拼接换成占位符,通过使用此占位符来进行防字符串攻击,这样,占位符所代表的的仅仅是字符串,不带有代码含义
用占位符进行防御之后不会改变表的其他内容,会将这句代码原封不动的存到数据库中而不会改变c#中的sql语句。
使用占位符时最好先清除一次,防止受到之前占位符的影响


开发项目三层架构:界面层、业务逻辑层、数据访问层
其中数据访问层分为:
1、实体类
数据库中的表映射为一个类,类名与表名一致。表中的每一列,都为该类下的成员变量和属性也就是最简单的封装
把数据库中的表名变为类的类名。
把数据库中的每一个列,变为实体类中的成员变量和属性
列名与属性名一致。成员变量名:在列名前边加上下划线
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1.App_Code
{
public class Users
{
private int _Ids; public int Ids
{
get { return _Ids; }
set { _Ids = value; }
}
private string _UserName; public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
private string _PassWord; public string PassWord
{
get { return _PassWord; }
set { _PassWord = value; }
}
private string _NickName; public string NickName
{
get { return _NickName; }
set { _NickName = value; }
}
private bool _Sex; public bool Sex
{
get { return _Sex; }
set { _Sex = value; }
}
private DateTime _Birthday; public DateTime Birthday
{
get { return _Birthday; }
set { _Birthday = value; }
}
private string _Nation; public string Nation
{
get { return _Nation; }
set { _Nation = value; }
}
}
}
2、数据访问类
将某个表的数据库操作写成一个一个方法,放入到此类中,供外部调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; namespace ConsoleApplication2.App_Code
{
public class UsersData
{
SqlConnection conn = null;
SqlCommand cmd = null; public UsersData()
{
conn = new SqlConnection("server=.;database=Data0216;user=sa;pwd=123");
cmd = conn.CreateCommand();
} public List<Users> SelectAll()
{
List<Users> list = new List<Users>(); cmd.CommandText = "select *from Users";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Users u = new Users();
u.Ids = Convert.ToInt32(dr["ids"]);
u.UserName = dr["UserName"].ToString();
u.PassWord = dr["PassWord"].ToString();
u.NickName = dr["NickName"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Birthday = Convert.ToDateTime(dr["Birthday"]);
u.Nation = dr["Nation"].ToString(); list.Add(u);
}
conn.Close();
return list;
} public void Insert(Users u)
{
cmd.CommandText = "insert into Users values(@username,@password,@nickname,@sex,@birthday,@nation)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@username", u.UserName);
cmd.Parameters.AddWithValue("@password", u.PassWord);
cmd.Parameters.AddWithValue("@nickname", u.NickName);
cmd.Parameters.AddWithValue("@sex", u.Sex);
cmd.Parameters.AddWithValue("@birthday", u.Birthday);
cmd.Parameters.AddWithValue("@nation", u.Nation); conn.Open();
int a= cmd.ExecuteNonQuery();
if (a > ) Console.WriteLine("添加数据成功");
else Console.WriteLine("添加数据失败");
conn.Close();
}
}
}
【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类的更多相关文章
- 【2017-04-20】Sql字符串注入式攻击与防御
一.攻击 所谓sql字符串注入式攻击就是在用户输入界面输入一串sql语句,来改变C#中连接数据库要执行的sql语句 通过你写的程序,直接来执行我想要执行的sql语句 例如:在这么一个程序中,sname ...
- SQL的注入式攻击方式和避免方法
SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到 SQL Server 的实例以进行分析和执行.任何构成 SQL 语句的过程都应进行注入漏洞检查,因为 SQ ...
- C#-黑客-数据库访问-字符串的攻击和防御
C#中用基本的方法对数据库进行增删改查,会被黑客利用,写入其他的代码以实现对数据库的数据进行其他的操作.例如: 对下列数据库的某个信息进行修改操作 修改代码: using System; using ...
- 支持SQL Server数据库又支持MongoDB数据库的数据访问设计
网站整体架构建议采用工厂模式 分别包括:数据访问层DAL,数据访问接口层IDAL,工厂层DALFactory,业务逻辑层,显示层这样的架构方式 在WebConfig配置采用何种数据库的数据访问层 &l ...
- ADO.net 防止SQL 字符串注入攻击
规避SQL注入 如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入Code值 p001' union select * from Info where '1'='1 //这样可 ...
- 2017.04.20 Adams仿真介绍
Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...
- 简单数据访问类,生成简单SQL,自动转换成java对象
import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; impo ...
- 浅谈C#.NET防止SQL注入式攻击
1#region 防止sql注入式攻击(可用于UI层控制) 2 3/// 4/// 判断字符串中是否有SQL攻击代码 5/// 6/// 传入用户提交数据 7/// true-安全:f ...
- 防止sql注入式攻击 SQL注入学习——三层架构
解决方案是:1.首先在UI录入时,要控制数据的类型和长度.防止SQL注入式攻击,系统提供检测注入式攻击的函数,一旦检测出注入式攻击,该数据即不能提交:2.业务逻辑层控制,通过在方法内部将SQL关键字用 ...
随机推荐
- linux链接库的理解
前段时间遇到个奇怪的问题,经调试是由于可执行程序A编译时使用的libssl.so.1.1及对应版本头文件,A链接的库libtest.so编译时使用的libssl.so.1.0及对应版本头文件,执行时l ...
- bug:使用UIImageView+AFNetworking 图片不能正常显示的原因
今天调的东西涉及到图片加载,我刚看了下项目里以前导入了SDWebImage库,又发现整个就一个地方使用到了SDWebImage异步加载图片的方法,感觉占体积又鸡肋,干脆去掉,用UIImageView+ ...
- mysql分页优化方法
mysql分页优化方法 今天遇到开发反应分页语句很慢,马上看一下到底是啥的分页语句 原分页语句 SELECT * FROM `tt` LIMIT , 执行这个语句需要6秒+时间 执行计划为全表扫描 在 ...
- 下载以及安装VMware Player Pro 64位
1.下载地址:https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.0.0-6661328.exe 2. ...
- RCNN
[Rich feature hierarchies for accurate object detection and semantic segmentation] 技术路线:selective se ...
- 向数据库中添加数据,通过se16 不能添加,通过 代码可以添加的原因
1: 在向数据库中添加数据时,通过客户端se16 准备对 数据表进行添加数据,提示如下: 找了以下原因,如下: https://www.baidu.com/link?url=3yRtAfY1_9XG ...
- (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...
- vue watch 监听element upload组件上传成功返回的url列表
因为 on-success 上传成功返回的是一个异步的结果....如果父组件需要这个结果的话 必须用watch 监听 然后里面建立一个 save()方法 save方法里面再调用接口 传需要的上传之后的 ...
- Maven - “Could not calculate build plan”问题
解决方法如下: 1.将C:\User\.m2\repository\org\apache\maven\plugins\maven-deploy-plugin目录下的文件夹删除. 2.然后右击项目Mav ...
- async和await用法(Task)
原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...