解决sql注入问题(丛林战争项目)
一、正常的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;namespace MySqlOperation
{class Program{static void Main(string[] args){//Database指定数据库,Data Source指定本机ip,port指定端口号,user id指定用户名,password 指定密码,各属性之间用“;”进行分隔String connStr = "Database=test_connection;Data Source=127.0.0.1;port=3306;User Id=root;Password=123456";//建立连接,参数为连接的字符串,即ip地址、端口号、账号、密码MySqlConnection conn = new MySqlConnection(connStr);//打开连接conn.Open();String userName = "test";String passWord = "test";MySqlCommand cmd = new MySqlCommand("insert into user set userName='"+userName+"',passWord='"+passWord+"'",conn);cmd.ExecuteNonQuery();//关闭流conn.Close(); //关闭连接Console.ReadKey(); //让程序暂停}}
}
正常的运行结果:
在表的最后增加了一个userName和passWord都为test的用户
二、异常代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;namespace MySqlOperation
{class Program{static void Main(string[] args){//Database指定数据库,Data Source指定本机ip,port指定端口号,user id指定用户名,password 指定密码,各属性之间用“;”进行分隔String connStr = "Database=test_connection;Data Source=127.0.0.1;port=3306;User Id=root;Password=123456";//建立连接,参数为连接的字符串,即ip地址、端口号、账号、密码MySqlConnection conn = new MySqlConnection(connStr);//打开连接conn.Open();String userName = "test";String passWord = "test'delete from user";MySqlCommand cmd = new MySqlCommand("insert into user set userName='"+userName+"',passWord='"+passWord+"'",conn);cmd.ExecuteNonQuery();//关闭流conn.Close(); //关闭连接Console.ReadKey(); //让程序暂停}}
}
运行结果:
passWord中增加了sql命令,user表中的内容全部被删除掉了
三、解决办法:
将代码由
String userName = "test";String passWord = "test';delete from user;";MySqlCommand cmd = new MySqlCommand("insert into user set userName='"+userName+"',passWord='"+passWord+"'",conn);
改为:
String userName = "test";String passWord = "test';delete from user;";MySqlCommand cmd = new MySqlCommand("insert into user set userName=@un,passWord=@pwd", conn);cmd.Parameters.AddWithValue("un",userName);cmd.Parameters.AddWithValue("pwd", passWord);
其中un和pwd都是自己定义的,AddWithValue会将这两个参数仅仅作为参数传递
完整的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;namespace MySqlOperation
{class Program{static void Main(string[] args){//Database指定数据库,Data Source指定本机ip,port指定端口号,user id指定用户名,password 指定密码,各属性之间用“;”进行分隔String connStr = "Database=test_connection;Data Source=127.0.0.1;port=3306;User Id=root;Password=123456";//建立连接,参数为连接的字符串,即ip地址、端口号、账号、密码MySqlConnection conn = new MySqlConnection(connStr);//打开连接conn.Open();String userName = "test";String passWord = "test';delete from user;";//MySqlCommand cmd = new MySqlCommand("insert into user set userName='"+userName+"',passWord='"+passWord+"'",conn);MySqlCommand cmd = new MySqlCommand("insert into user set userName=@un,passWord=@pwd", conn);cmd.Parameters.AddWithValue("un",userName);cmd.Parameters.AddWithValue("pwd", passWord);cmd.ExecuteNonQuery();//关闭流conn.Close(); //关闭连接Console.ReadKey(); //让程序暂停}}
}
运行后的结果:
解决sql注入问题(丛林战争项目)相关推荐
- mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...
本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...
- 使用过滤器解决SQL注入和跨站点脚本编制
1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...
- python防止sql注入的方法_python解决sql注入以及特殊字符
python往数据库插入数据, 基础做法是: cur=db.cursor() sql = "INSERT INTO test2(cid, author, content) VALUES (1 ...
- mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL
本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...
- 解决SQL注入与XSS攻击
最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击.这个任务自然而然的就落到我手上.在这里记录一下操作的过程. 扫描 ...
- ibatis解决sql注入问题 .
最近看看了SQL注入的问题,这篇文章解决了ibatis如何防sql注入攻击,值得参考,转自http://blog.csdn.net/scorpio3k/article/details/7610973 ...
- SQL注入检测模块开源项目DRUID-SQL-WALL学习小结
作为sql注入原理.sql注入检测.防御系列学习的第三篇.本文主要关注了抽象语法树ast在sql注入检测上的应用开发.以及开源项目druid-sql-wall的学习,希望能给研究这一领域的朋友带来一点 ...
- 026_jdbc-mysql-PrepareStatement解决sql注入
1. 新建一个JDBCPrepareStatement工程, 使用我们之前的JDBCUtil.java和jdbc.properties属性文件 2. PreparedStatement对象相比较以前的 ...
- SQL注入-入门需了解项目
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 什么是SQL? 一.SQL注入 1.什么是SQL注入 2.SQL注入漏洞的原理是什么? 3.SQL注入漏洞产生的基本前提 4 ...
- 什么是SQL注入?怎么解决SQL注入?
SQL注入就是一些攻击者把SQL命令插入到web表单的输入或者页面的url中,欺骗服务器执行恶意的SQL语句.在某些表单中,用户输入的内容直接用来构造或者影响动态SQL命令,或者作为存储过程的输入参数 ...
最新文章
- ArcGIS字段计算器 Field Calculator错误
- 程序员如何优雅度过一生的15个建议
- FreeMarker 语法
- 关于进程句柄 窗口句柄的关系
- 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
- spark读取kafka数据_解决Spark数据倾斜(Data Skew)的N种姿势
- VMware11.1.2+centOS7.4虚拟机联网问题并设置静态IP
- HTML期末网页设计——设计报告
- web测试和app测试的区别你知道吗?
- VM和CentOS的安装
- apkg格式怎么打开_win10系统怎么打开mdb文件
- ArcGIS表转EXCEL超出上限转换失败
- QuantLib 金融计算——基本组件之 ExchangeRate 类
- MM物料账在制品承担差异功能及配置
- Excel如何批量查询手机号码归属地
- es6面试题总结(一)
- AD19设置元件属性
- 计算机毕业设计之java+ssm基于web的医院门诊互联电子病历管理信息系统
- linux 获取优盘设备序列号变为小写再用MD5加密
- SQL Server 数据分区管理
热门文章
- Vue3 + TS 使用 element-plus 的Icon组件(包括动态路由菜单图标)
- Ubuntu——为软件创建菜单(桌面)图标的方法
- C语言:统计候选人的得票数
- linux下的c开发工具,4.3.2 Linux下的C开发工具
- Redis 的缓存策略
- 图神经网络 | (2) 图神经网络(Graph Neural Networks,GNN)综述
- 移动端--app,小程序,h5
- 助理工程师职称到底有没有用呢?一定要评吗?甘建二
- 字符编码与游戏中的字符边界检查
- multipartfile 后端怎么接受_精华 | 前端必看,一文教你读懂芯片后端报告!