ADO.NET字符串注入式攻击与防御

一、字符串注入攻击

所谓sql字符串注入式攻击就是在用户输入界面输入一串sql语句,来改变C#中连接数据库要执行的sql语句

通过你写的程序,直接来执行我想要执行的sql语句

例如:在这么一个程序中,sname是需要用户输入的内容。

在用户输入界面输入

a‘);update 表名 set 列名 =‘字段名称;--

假如你在输入时输入了这句代码:a‘);update student set sname =‘朱利军;--

原理:用户输入的代码将c#中的sql语句中的sname替换掉了,就变成了下边的黑客想执行的sql语句。

insert into Student values(‘"+sno+"‘,‘a‘);

update Student set Sname =‘朱利军;--‘)

二、防御

将C#中操作数据库执行的sql语句中的字符串拼接换成占位符

在防御之后再用之前的放法进行攻击

用占位符进行防御之后不会改变表的其他内容,会将这句代码原封不动的存到数据库中而不会改变c#中的sql语句。

注意:sql语句中带模糊查询的防御方法

将‘%哈哈%‘  全部用占位符占位。例子如下:

cmd.CommandText = "select*from Subject where SubjectName like @a";

cmd.Parameters.Clear();   

 cmd.Parameters.AddWithValue("@a","%"+subname+"%");

时间: 2024-10-07 06:02:46

ADO.NET字符串注入式攻击与防御的相关文章

【2017-04-20】Sql字符串注入式攻击与防御

字符串攻击 所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作 在用户输入界面输入  a');update Student set Sname ='伊伊';-- 则数据库Sname一列都讲变为  伊伊 原理:用户输入的代码将c#中的sql语句中的sname替换掉了,就变成了下边的黑客想执行的sql语句. insert into Student values('"+sno+"','a')

C#-黑客-数据库访问-字符串的攻击和防御

C#中用基本的方法对数据库进行增删改查,会被黑客利用,写入其他的代码以实现对数据库的数据进行其他的操作.例如: 对下列数据库的某个信息进行修改操作 修改代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace 攻击_防御 { class P

防止连接字符串注入式攻击

使用sqlConnectionStringBuilder来处理 Initial Catalog 设置插入的额外值: 1 System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); 2 builder["Data Source"] = "(local)"; 3 builder["integr

ADO.NET之注入式攻击

关于Sql注入,经典的注入语句是' or 1=1--     以下说说如何最大限度的避免注入问题. 一.SQL参数用法1 1.思维导图 属性   ParameterName 取得或設定 SqlParameter 的名稱. Value 取得或設定參數的值. SqlDbType 取得或設定參數的 SqlDbType Size 取得或設定資料行中資料的最大大小 (以位元組為單位). 2.示例代码 1 SqlParameter sqlParameter = new SqlParameter(); //声

ADO.NET 【攻击及防御】

sql字符串注入攻击 SQL注入攻击是黑客对数据库进行攻击的常用手段之一.SQL注入的手法相当灵活 SQL注入攻击会导致的数据库安全风险包括:刷库.拖库.撞库. 一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中, 如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大. SQL注入攻击被俗称为黑客的填空游戏. 攻击思路 发现SQL注入位置: 判断后台数据库类型: 确定XP_CMDSHELL

ado.not--数据库防字符串注入攻击学习及 练习

数据库防字符串注入攻击:cmd.CommandText = "update student set [email protected],[email protected],[email protected],[email protected] where code = @Scode";cmd.Parameters.Clear();                ---------一个集合cmd.Parameters.Add("@Sname", Sname);cmd.

JDBC编程之预编译SQL与防注入式攻击以及PreparedStatement的使用教程

在JDBC编程中,常用Statement.PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程. 1.Statement       该对象用于执行静态的 SQL 语句,并且返回执行结果. 此处的SQL语句必须是完整的,有明确的数据指示.查的是哪条记录?改的是哪条记录?都要指示清楚.     通过调用

浅谈C#.NET防止SQL注入式攻击

1#region 防止sql注入式攻击(可用于UI层控制)  2  3///   4/// 判断字符串中是否有SQL攻击代码  5///   6/// 传入用户提交数据  7/// true-安全:false-有注入攻击现有:  8public bool ProcessSqlStr(string inputString)  9{ 10    string SqlStr = @"and|or|exec|execute|insert|select|delete|update|alter|create

什么是SQL注入式攻击

什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击.常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码. ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直