sql注入

Java-JDBC(数据库)

蹲街弑〆低调 提交于 2020-01-12 13:56:59
JDBC JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 执行流程: 连接数据源,如:数据库。 为数据库传递查询和更新指令。 处理数据库响应并返回的结果 JDBC具体语法1: 1.获取连接对象 // 参数为连接数据名,用户名,密码(这里密码为空妹设密码) Connection conn = DriverManager . getConnection ( "jdbc:mysql://localhost:3306/newdb3" , "root" , "" ) ; 2.创建SQL执行对象Statement Statement s = conn . createStatement ( ) ; 3.执行SQL语句 String sql = "create table jdbct1(id int,name varchar(10))" ; s . execute ( sql ) ; 4.关闭连接 conn . close ( ) ; JDBC具体语法2(创建预编译SQL执行对象): 2

分享自己的超轻量级高性能ORM数据访问框架Deft

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-12 13:55:46
Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手。 Deft包含如下但不限于此的特点: 1、按照Transact-SQL的语法语义风格来设计,只要调用者熟悉基本的Transact-SQL语法即可瞬间无忧开码,大大降低了学习Deft的成本,甚至零成本。 2、性能十分不错(个人觉得易用性很重要,只要性能不拖后腿就好了),通过缓存+Emit反射IDataReader,极速获取List<T>。 3、强大的查询功能,支持使用Lambda表达式任意组装where条件,支持各种各样的运算符和括号优先级,支持给查询字段取别名。 4、支持SQLServer、MySQL、Oracle、SQLite等多数据库类型,同时也支持一个业务系统里面存在多个数据库。 5、支持事务、分页查询、排序等。 6、支持like,in等sql操作符,支持avg,count,max,min,sum等sql函数。 7、颜值高,整套语法接口设计的十分巧妙,支持Lambda 表达式,链式编程,任意组装sql,极度美观。 8、支持手写sql, List<T> Select<T>(string sql)。 9、各种映射能力,包括任意查询的结果映射,支持dynamic。 10、实体类非常简单,手写即可,不需要借助工具,也没有特性标记或者继承BaseEntity等杂七杂八的东西。 11

无需“in”的SQL盲注

瘦欲@ 提交于 2020-01-12 10:38:19
为了锻炼安全技术,我在TetCTF上想寻找一些新奇的网络挑战,并注意到一个有趣的系统——“Secure System”。 其中挑战目标是制作一个和SQL盲注有关的payload,并且不使用: UNION … SELECT information_schema “in”和“or”等关键词 尽管还有其他安全过滤,但以上关键词是最难克服的障碍。 information_schema的替代方法 我在网上搜索了一下从MySQL数据库中检索表名的替代方法,但没有找到任何可行的方法。所有的技术都依赖于 information_schema 或 mysql.innodb_table_stats ,但这两者都会被“in”关键词过滤掉。所以,我需要寻找新方法,并在研究了一段时间后成功发现了替代品 sys.x$schema_flattened_keys 。 在上述示例中,不仅包含一个 table_name 列,还包含“索引列”。但这不是唯一的方法,还有另一个表 sys.schema_table_statistics 可显示更多的表: 通过这种方法和SQL盲注技术,我成功得到了目标表名 Th1z_Fack1n_Fl4444g_Tabl3 。 他人的解决方案 在尝试检索列名的时候,我遇到了不小的困难,尝试了很多方法都不成功。但我发现的表格 sys.x$statement_analysis

数据库与SQL语言<4>

筅森魡賤 提交于 2020-01-11 08:03:25
s数据库面试主要包含范式、事务、存储过程、SQL语言,以及索引等诸多方面。 1.数据库理论 第一范式:关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R属于第一范式。 第二范式:如果关系型数据库属于第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称第二范式。 第三范式:如果关系型数据库是第二范式,且每个非主属性每个非主属性都不传递依赖于R的候选键,则称R的第三范式。 BC范式:关系模式属于第一范式,且每个属性都不传递依赖于R的候选键。 第四范式:R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡的多值依赖X->->Y时,X必是R的超键。 数据库事务:作为单个逻辑工作单元执行的一系列操作,这些单元要么全做要么全不做,是不可分割的工作单元。(原子性、一致性、独立性、持久性) 游标作用:定位结果集的行。 事前触发(事案件发生前触发)、事后触发、语句级触发(可以在语句执行前或者后执行)、行级触发(触发器影响的每一行触发) SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。 2.SQL语言 select *from ppp where num<=all(select num from ppp) ------------找出表ppp中num最小的对应数据 selct top 1 num

Mybatis(二)自定义DAO与代理DAO && 配置文件含义

*爱你&永不变心* 提交于 2020-01-11 04:19:26
自定义流程再分析 基于代理 Dao 实现 CRUD 操作 使用要求: 1、持久层接口和持久层接口的映射配置必须在相同的包下 2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名 3、SQL 语句的配置标签<select>,<insert>,<delete>,<update>的 id 属性必须和持久层接口的 方法名相同 根据 ID 查询 在持久层接口中添加 findById 方法 User findById(Integer userId); <!-- 根据 id 查询 --> <select id="findById" resultType="com.itheima.domain.User" parameterType="int"> select * from user where id = #{uid} </select> 细节: resultType 属性: 用于指定结果集的类型。 parameterType 属性: 用于指定传入参数的类型。 sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。 #{}中内容的写法: 由于数据类型是基本类型,所以此处可以随意写。 public class MybatisTest { private

sql注入:union联合查询

烂漫一生 提交于 2020-01-11 00:37:52
例如有一个网站:www.xxxxx.com/artist.asp?id=2 id=2 order by 3 正常 id=2 order by 4 不正常 order by需要获取字段的总数为3 id=2 union select 1,2,3 id=2 union select 1,2,database() #爆数据库名 id=2 union select 1,2,database() 有一些数据,union联合查询后,不会多行显示,就需要先让前面的语句失效 id=-2 union select 1,2,database() id=-2 union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLE_SCHEMA='sqlzhuru' #已知数据库sqlzhuru,爆表名(第一个表) 因id = -2不存在,带入select * from admin where id=-2报错哦 当然你也可以用下面的这个语句,效果等同于“id=-2” id=2 and 1=2 union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLE_SCHEMA='sqlzhuru' #已知数据库sqlzhuru,爆表名(第一个表) id=2 and 1

MyBatis中#{}和${}的区别详解

烂漫一生 提交于 2020-01-10 22:03:32
区别 1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. 将 传 入 的 数 据 直 接 显 示 生 成 在 s q l 中 。 如 : o r d e r b y 将传入的数据直接显示生成在sql中。如:orderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id. 3.#方式能够很大程度防止sql注入。 4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 实例讲解 : 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。 在下面的语句中,如果 name 的值为 zhangsan,则两种方式无任何区别: select * from user

入门:SQL手工注入漏洞测试(Sql Server数据库)

邮差的信 提交于 2020-01-10 16:50:02
入门:SQL手工注入漏洞测试(Sql Server数据库) 题目 背景介绍 实训目标 解题方向 解题步骤 题目 背景介绍 安全工程师"墨者"最近在练习SQL手工注入漏洞,自己刚搭建好一个靶场环境IIS+ASP+Sql Server,Aspx代码对客户端提交的参数未做任何过滤。尽情的练习SQL手工注入吧。 实训目标 1.掌握SQL注入原理; 2.了解手工注入的方法; 3.了解Sql Server的数据结构; 4.了解字符串的MD5加解密; 解题方向 手工进行SQL注入测试,获取管理密码登录。 解题步骤 启动靶场环境,得到测试地址 http://219.153.49.228:45445/ 访问页面,寻找sql注入点,访问注入页面。 http://219.153.49.228:45445/new_list.asp?id = 2 使用sql注入工具,如sqlmap或穿山甲,进行注入测试。 本次使用穿山甲进行注入。 对密码密文进行MD5解码,得到密码明文,解码网址如下 cmd5.com 使用得到的用户名和密码登录后台,发现key。 提交key即可。 来源: CSDN 作者: CN_wanku 链接: https://blog.csdn.net/qq_43233085/article/details/103924954

测试

一世执手 提交于 2020-01-10 15:24:00
getAttribute()设置数据库连接属性 先确认可以得到那些属性,然后在设置一下 1表示默认情况下自动提交时开启的 0代表错误模式默认的是静默模式 getAttribute()设置数据库连接属性 先确认可以得到那些属性,然后在设置一下 1表示默认情况下自动提交时开启的 0代表错误模式默认的是静默模式 那么,我们可以通过setAttribute()设置自动提交的属性为0 那么,我们可以设置哪些属性呢?? 常用的是前三个: 第一个是是否自动提交PDO::ATTR_AUTOCOMMIT,自动提交为1,否则为0 第二个是错误处理模式PDO::ATTR_ERRMODE,静默模式为0 第三个是字段名称是否大小写转换PDO::ATTR_CASE,不开启大小写为0 注意:如果部分属性是没有的,表示数据库驱动不支持这种属性 数据库的一些链接属性可以放在$options中 quote()方法防止SQL注入 一定要过滤用户输入的数据 ———————————————— 版权声明:本文为CSDN博主「cpongo6666」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://test66.blog.csdn.net/article/details/95944804 getAttribute()设置数据库连接属性 先确认可以得到那些属性

Mybatis是如何实现防止SQL注入

你说的曾经没有我的故事 提交于 2020-01-10 13:36:00
Q:mybatis框架里 $ 和 # 的区别? A: 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'. 2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1. 3 使用#可以很大程度上防止sql注入。(语句的拼接) 4 但是如果使用在order by 中就需要使用 $. 5 在大多数情况下还是经常使用#,但在不同情况下必须使用$. 我觉得#与 的区别最大在于:#{} 传入值时,sql解析时,参数是带引号的,而 的区别最大在于:#{} 传入值时,sql解析时,参数是带引号的,而${}穿入值,sql解析时,参数是不带引号的。 什么是SQL注入 在讨论怎么实现之前,首先了解一下什么是SQL注入,我们有一个简单的查询操作:根据id查询一个用户信息。它的sql语句应该是这样: select * from user where id =