sql注入

MySQL数据库(5)- pymysql的使用、索引

眉间皱痕 提交于 2020-01-01 07:27:33
一、pymysql模块的使用 1、pymysql的下载和使用 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就需要用到pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事先安装。 1)pymysql模块的下载 pip3 install pymysql 2)pymysql模块的使用 现有数据库mydb,其中有一个userinfo表,表中数据如下: mysql> select * from userinfo; +----+------+-----+ | id | name | pwd | +----+------+-----+ | 1 | wll | 123 | | 2 | ssx | 456 | +----+------+-----+ 示例:使用Python实现用户登录,如果用户存在则登录成功,否则登录失败 import pymysql username = input('请输入用户名:') pwd = input('请输入密码:') # 1、连接 conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', db = 'mydb', charset = 'utf8' ) # 2

Spring的数据库开发

这一生的挚爱 提交于 2020-01-01 01:00:59
spring的jdbcTemplate操作(用在dao层) spring框架是一个一站式框架,在每一层都提供了解决技术:在Dao层是使用了jdbcTemplate。 spring针对不同的持久化技术都提供了不同的模板。 Spring JDBC   Spring的JDBC模板负责提供数据库资源的管理和错误处理,大大简化了开发人员对数据库操作,使得开发人员可以从繁琐的数据库操作中解脱出来。 Spring jdbcTemplate的解析   针对数据库的操作,Spring框架提供了jdbcTemplate类,该类是Spring框架数据层的基础,其他更高层次的抽象类是构建在JdbcTemplate类之上,可以说,JdbcTemplate是Spring JDBC的核心类。   JdbcTemplata类的继承关系十分简单,它继承了JdbcAccessor抽象类,同时实现了JdbcOperations接口。   JdbcAccessor的设计中,对DataSource数据源进行了管理和配置,JdbcOperation接口定义中,定义了通过JDBC操作数据库的基本方法,而核心类JdbcTemplate提供了这些接口方法的实现。 Spring JDBC的配置   Spring JDBC模板主要是有四个包组成,分别是core(核心包),dataSource(数据源包),object(对象包)

2019年mybatils面试高频题(java)

浪尽此生 提交于 2019-12-31 12:33:04
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。 那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。 如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 一、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 二、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 三、Mybatis是如何进行分页的?分页插件的原理是什么? 答: 1、Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2、分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t

mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析

泄露秘密 提交于 2019-12-31 09:38:22
序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟dao 建立关系;然后 xml 中的每段 sql 会有一个id 跟 dao 中的接口进行关联。 那么问题来了: "如果 我有两个这个xml 文件 都跟这个dao 建立关系了,那不是就是冲突了?" 带着这个疑问我们就要开始下面的正题了! 一、初始化 首先我们要知道每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。 但 SqlSessionFactory 是一个接口,它里面其实就两个方法: openSession 、 getConfiguration 其中, openSession 方法是为了获取一个SqlSession对象,完成必要数据库增删改查功能。但是,SqlSessionFactory属性太少了,所以需要 getConfiguration 的配合;来配置mapper映射文件、SQL参数、返回值类型、缓存等属性。 /** * Creates an {@link SqlSession} out of a connection or a

SQL注入的原理分析

拜拜、爱过 提交于 2019-12-30 19:11:35
SQL注入本质 谈到SQL注入前我们先谈谈什么是注入 注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行 那么什么是SQL注入,就是针对SQL语句的注入,也可以理解为用户输入的数据当做SQL语句的代码执行了 SQL注入是1998年一名叫做rfp的黑客发表的一篇文章所进入大众视线的 显错注入靶场的做法 判断注入点 最古老的方法:and1=1页面正常 and1=2页面不正常 最简单的方法:页面后面加',看是否报错 如果是数字型传参,可以尝试-1 例如: http://www.xxx.com/new.php?id=1 页面显示id=1的新闻 http://www.xxx.com/new.php?id=2-1 页面显示id=1的新闻 and 1=1 and 1=2被拦截的可能性太高了 可以尝试 and -1=-1 and -1=-1 或者直接or sleep(5) select * from news where id = 1 and 1 = 2 '' // "" 只有 and 被当做 SQL 语句执行的时候才会 and 和 (两个条件都满足) or 或 (两个条件只需要满足一个) 显错注入-联合查询(Mysql数据)的基本流程 显错注入-联合查询 是否存在注入点 猜解字段数

JPA 原生SQ查询

北慕城南 提交于 2019-12-29 23:55:34
参考文章 https://blog.csdn.net/coding_1994/article/details/84575943 https://blog.csdn.net/m0_37776094/article/details/78419669 import org.springframework.stereotype.Service; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import javax.persistence.Query; import java.util.List; @Service public class GetCodeService { private EntityManagerFactory emf; @PersistenceUnit//使用这个标记来注入EntityManagerFactory public void setEntityManagerFactory(EntityManagerFactory emf) { this.emf = emf; } /** * @param * @return */ public String

Yii的学习(3)--查询生成器 (Query Builder)

大城市里の小女人 提交于 2019-12-29 16:06:32
原文地址: http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder 不过原文是英文的,Yii的官网没有翻译这一章,自己就尝试着翻译了一下,有很多地方时会按自己的理解写,不一定完全按原文翻译。。。 Yii的查询生成器提供了用面向对象的方式写SQL语句。 它允许开发人员使用类的方法和属性来指定一个SQL语句的各个部分。 然后,组装成一个有效的SQL语句,可以通过调用DAO数据访问对象的描述方法为进一步执行。 以下显示了 一个 典型的使用查询生成器 建立一个select 语句 : $user = Yii::app()->db->createCommand() ->select('id, username, profile') ->from('tbl_user u') ->join('tbl_profile p', 'u.id=p.user_id') ->where('id=:id', array(':id'=>$id)) ->queryRow(); 当你在应用程序中需要组装SQL语句的程序,或基于一些条件逻辑时,最好使用查询生成器。 使用 查询生成器 的好处主要 包括 : 它可以建立复杂的SQL语句编程。 它会自引用表名和列名防止SQL保留字和特殊字符的冲突。 它还可以引用参数值和使用参数绑定

CWF框架之SQLHelper,简单的数据逻辑案例

最后都变了- 提交于 2019-12-29 05:03:18
对于数据处理逻辑,上篇已经发布了又VB.net写的接口,这里公布一个又vb.net写的接口实现类 本来想发布类工厂操作,但是我的工程采用了配置文件注入方式,所以代码又点长,就先发sql数据库操作的实现类。 Imports System.Data Imports System.Data.SqlClient Imports System.Data.Common ''' <summary> ''' 简单数据操作底层类SQL数据库 ''' </summary> ''' <remarks> ''' 该类执行简单的数据操作支持SQL ''' 开发者:欧阳寒玟 ''' 开发时间:2009-01-25 ''' 修改时间:2010-10-25 ''' 作者网站: http://www.coldwin.org ''' </remarks> Public Class SQLHelper Implements IDbHelper Private conStr As String Private conn As SqlConnection ''连接对象 Private cmd As SqlCommand ''Command对象 Private _isTran As Boolean = False ''是否执行事务 #Region "准备工作" ''' <summary> ''' 获取或设置链接字符串 '''

Mybatis_#{param}和${param}的区别

会有一股神秘感。 提交于 2019-12-28 23:31:37
#{param} 生成的sql中将该参数使用?占位符替换,预编译后传入实际参数,使用PreparedStatement发送sql ${param}生成sql中将该参数的值直接替换到该位置的,如果是字符串一定要添加’’ 使用${param}时,即使statementType使用PREPARED,也可能出现SQL注入 建议使用statementType="PREPARED"和#{param}组合防止SQL注入 来源: CSDN 作者: Chill_Lyn_ 链接: https://blog.csdn.net/Chill_Lyn/article/details/103749110

pymysql和MySQLdb

有些话、适合烂在心里 提交于 2019-12-28 11:31:23
MySQLdb创建mysql数据库表 其实mysqldb创建表是有限制的,要求是5.1-5.5版本 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。 1.下载 首先要下载下载:请到官方网站http://sourceforge.net/projects/mysql-python/或者点击链接下载http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/1.2.3c1/MySQL-python-1.2.3c1.tar.gz?use_mirror=nchc 2.解压安装 解压:tar zxvf MySQL-python* 进入文件目录,运行以下命令: python setup.py install 3. 用法 ''' # 打开数据库连接 db = MySQLdb.connect("192.168.72.131","root","123456","test" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 如果数据表已经存在使用 execute() 方法删除表。 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 创建数据表SQL语句 sql = \"\"\"CREATE