SQL预编译防注入小测试

个人对SQL预编译的认识:


1、效率提升,对SQL语句编译一次可多次使用.避免了硬解析和软解析等步骤,当执行的语句上规模的时候性能差异还是很明显的。
2、安全提升,预编译之后的SQL语句,语义不会发生变化,安全性有相当大的提升。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;namespace PreSql
{class Program{/** create table test_table
(
a nvarchar(20)
)insert into test_table(a) values('2');*/const string conStr = @"Password=1qaz!QAZ;Persist Security Info=True;User ID=sa;Initial Catalog=IBatisNet;Data Source=WANGN\CR";static void Main(string[] args){Console.WriteLine("SqlJoin:");SqlJoin();Console.WriteLine();Console.WriteLine("PreSqlTest");PreSqlTest();Console.WriteLine("Completed");Console.Read();}static void SqlJoin(){string sql = "select count(*) from test_table where a='{0}'";string tmpSql = string.Format(sql, "1' or  '1'='1");string tmpSql2 = string.Format(sql, "1");using (SqlConnection conn = new SqlConnection(conStr)){if (conn.State != ConnectionState.Open){conn.Open();}SqlCommand com = new SqlCommand(tmpSql, conn);object obj = com.ExecuteScalar();Console.WriteLine("SQL注入成功:" + obj.ToString());SqlCommand com2 = new SqlCommand(tmpSql2, conn);object obj2 = com2.ExecuteNonQuery();Console.WriteLine("正常应返回-1:" + obj2);}}static void PreSqlTest(){string sql = "select count(*) from test_table where a=@id";using (SqlConnection conn = new SqlConnection(conStr)){if (conn.State != ConnectionState.Open){conn.Open();}SqlCommand com = new SqlCommand(sql, conn);com.Parameters.Add(new SqlParameter{DbType = DbType.String,Size = 256,ParameterName = "@id",Value = "1 or 1=1"});object obj = com.ExecuteScalar();Console.WriteLine("SQL注入不成功:" + obj.ToString());SqlCommand com2 = new SqlCommand(sql, conn);com2.Parameters.Add(new SqlParameter{DbType = DbType.String,Size = 256,ParameterName = "@id",Value = "1"});object obj2 = com2.ExecuteNonQuery();Console.WriteLine("正常应返回-1:" + obj2);}}}
}

执行结果:

SqlJoin:
SQL注入成功:1
正常应返回-1:-1

PreSqlTest
SQL注入不成功:0
正常应返回-1:-1
Completed

转载于:https://www.cnblogs.com/wangn/p/4170755.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春天:注入列表,地图,可选对象和getBeansOfType()陷阱

如果您使用Spring框架超过一个星期,那么您可能已经知道此功能。 假设您有多个bean实现了给定的接口。 尝试仅自动接线此类接口的一个bean注定会失败,因为Spring不知道您需要哪个特定实例。 您可以通过使用Primary批注来指定一个优先于其他实现的“ 最重要…

python实现表格分析与建模_python实现数据分析与建模

前言首先我们做数据分析,想要得出最科学,最真实的结论,必须要有好的数据。而实际上我们一般面对的的都是复杂,多变的数据,所以必须要有强大的数据处理能力,接下来,我从我们面临的最真实的情况&a…

Unity 利用Coroutine实现跳动数字效果

纯粹转载:转载注明参考链接! 参考链接:http://xataxnova.blog.163.com/blog/static/236620063201451061738122/,作者:网易博客 xataxnova 示例代码:(将该脚本绑在一个Lable对象上,即…

java mvc 案例_springmvc经典案例

本想自己写一下总结,但是发现一篇好文,转发一下,日后自己再做补充;感谢Sunnier,引自:https://www.cnblogs.com/sunniest/p/4555801.htmlSpringMVC学习笔记----一、SpringMVC基础入门,创建一个He…

Ajax.ActionLink 辅助方法实现局部刷新

1,需要引用一个JS文件jquery.unobtrusive-ajax.min.js【MVC4 默认存在Scripts文件夹里】引用到母版页 _Layout.cshtml,并且一定要放在JQuery引用文件之后 2,需要添加一个分布视图到指定的目录里,分布视图是用来显示局部刷新的 3&a…

java 命名约定_Java命名约定

java 命名约定我想写这篇简短的文章来帮助某些难以记住Java API类和方法名称的人。 如您所知,Java是区分大小写的语言,要构建Java程序,您需要使用许多内置API类和方法。 而且,初学者发现很难准确地记住方法名称和类名称而不改变大…

Discuz UCenter 修改手记 - 2014.12.19

最近在整JAVA和UCENTER的东西,受限于项目架构需要,无法完全以UCENTER为中心,所以在对接过程中遇到了许多不愉快的事情。经历多番研究,终于解决了其中了两个大问题,现记录下来,以备日后查看。 一、解决email…

java泛型方法无参_从头再来:Java泛型(开发必须知道的)

Java泛型老规矩,测试一下,下面的程序能否正常运行?为什么?开头测试题泛型就是实现了参数化类型,也就是代码可以适用于多种类型。泛型是在编译期检查的,在编译期检查类型是否安全。我认为泛型最有用的就是和…

几种常见模式识别算法整理和总结

这学期选了门模式识别的课。发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一開始仅仅只是被那些看似formidab…

使用Fabric8在CDI管理的bean中注入Kubernetes Services

序幕 在Kubernetes中我最喜欢的就是发现服务的方式。 为什么? 主要是因为用户代码不必处理注册,查找服务,也没有网络意外(如果您曾经尝试过基于注册表的方法,那么您就会知道我在说什么) 。 这篇文章将介绍…

意外分配– JIT编译抖动

在研究ByteWatcher时 (请参阅我的上一篇 文章 ),我遇到了一些非常奇怪的事情。 这是实际的代码段,用于找出特定线程上的分配量: return (long) mBeanServer.invoke(name,GET_THREAD_ALLOCATED_BYTES,PARAMS,SIGNATUR…

fastd java下载_FastReport VCL报表控件

FastReport VCL报表控件是著名的 Delphi 打印控件。含全部源码。支持 Delphi 10.2 Tokyo,FastReport可以在大量的方式报表的创建过程中操纵对象。快速发展的报表和随后的打印,这样的优点,正如预览打印文档的外观。专业版除了报表标准版的功能…

#102030:在30天内运行20 10K来庆祝Java的20年

1995年5月23日是技术史上的重要时刻。 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局。 Java将在今年的同一天庆祝20岁生日。 Java 20年,哇! 回顾20年前的存储器时代,思考一下Java的发明时间/方式。 万维网专用于精…

View 的 android:visibility属性的讨论

Android VIEW 中的 visibility 属性,在API中的描述为:Controls the initial visibility of the view. [控制VIEW的初始可见性]。 其中包含三个参数: * 默认值为visible,可见。这里需要注意的是 "invisible" 和 "go…

jms java client mq_将Java客户端(JMS)连接到IBM MQ时出现问题

我正在尝试使用基本上通过以下方式构建的Java客户端使用SSL消耗IBM MQ(版本8.0.0.8):Oracle JKD 8和IBM JRE 7(出于测试目的,我每个都有一个客户端)com.ibm.mq.allclient-9.1.0.0.jarjavax.jms-api-2.0.1.jarspring-jms-4.3.7.RELEASE.jarspring-jms-4.3…

JQuery-Dialog(弹出窗口,遮蔽窗口)

在Ajax中经常用到的弹出窗口和遮蔽窗口。自己写肯定是一个最佳方案,但时间和成本上,还是决定了寻找现成的吧。大概罗列一下。需要我满足我几个条件 一定要简洁方便拥有遮蔽功能,Model Dialog ,所谓的模态窗口可以根据HTML弹出窗口…

java 设置系统参数_Java如何设置系统参数和运行参数

系统参数系统级全局变量,该参数在程序中任何位置都可以访问到。优先级最高,覆盖程序中同名配置。系统参数的标准格式为:-Dargnameargvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其…

HDU 1244 DP

题目大意: 我们需要将一串数字分成多个确定个数的连续段,在得到所有段的和的最大值 定义一个dp[i][j]数组表示在前j个数中取满 i 个段所能得到的最大值 那么也就是说明在这道题目当中每一段都是必须要被取到的 能够取到的前提是 j > cnt[i] //表示前 i 段的数字个…

java怎么生成字母_java自动生成字母

新建一个类SpringContextUtil.java:import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/*** 获取spring容器,以访问容器中定义的其…

一天一块钱第二天翻倍_再把钱翻倍

一天一块钱第二天翻倍总览 很久以前,我写了一篇关于用双倍赚钱的文章。 但是,当解决方案相当简单时,仍然是许多开发人员普遍担心的问题。 用双倍赚钱的问题 double有两种类型的错误。 它存在表示错误。 即它不能精确地表示所有可能的十进制…