sql注入

sql注入的防御

笑着哭i 提交于 2020-03-23 12:29:25
整型 intval()函数 但是不能暴库 注意:从yxcms来看,如果是批量传送整数,可能会出现没有使用intval()的情况,可能会存在注入。 字符型 htmlspecialchars()实体化,没啥用 addslashes()函数,没啥用 这是时候可以看看一些waf的过滤规则 注意:要是遇到转义引号的,尝试一下宽字符注入,或者直接来一波DNSlog注入 使用PDO预编译语句 来源: https://www.cnblogs.com/lyxsalyd/p/12551118.html

TKmybatis的框架介绍和原理分析及Mybatis新特性

戏子无情 提交于 2020-03-23 06:30:12
tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现对员工表的增删改查的代码 java的dao层接口 public interface WorkerMapper extends Mapper<Worker> {} xml映射文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.jjs.kaiwen.dao.WorkerMapper"> <resultMap id="BaseResultMap" type="com.jjs.kaiwen.model.Worker"> <!-- WARNING - @mbggenerated --> <id column="id" jdbcType="INTEGER" property="id" /> <result column="worker_id" jdbcType="VARCHAR" property="workerId" />

Mybatis 框架学习

邮差的信 提交于 2020-03-23 05:45:35
Mybatis 一. 入门 1. JDBC 回顾 (1). 准备数据库 新建 mybatis_learn 数据库 执行 sql 脚本 1 -- ---------------------------- 2 -- Table structure for `Blog` 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `Blog`; 5 CREATE TABLE `Blog` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `author` varchar(128) NOT NULL COMMENT '作者', 8 `title` varchar(128) NOT NULL COMMENT '博客标题', 9 PRIMARY KEY (`id`) 10 ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 11 ​ 12 -- ---------------------------- 13 -- Records of Blog 14 -- ---------------------------- 15 INSERT INTO `Blog` VALUES ('1', '张三', 'Java基础概述'); 16 INSERT

手动SQL注入-Post请求

别等时光非礼了梦想. 提交于 2020-03-22 22:30:49
3 月,跳不动了?>>> Burpsuite介绍 Burpsuite是一款基于Java语言开发的Web安全测试利器几乎集成了Web安全测试中需要的所有功能。 Burpsuite使用 1、火狐浏览器选择“手动代理配置”并配置代理地址为127.0.0.1端口默认是8080,点击为所有协议使用相同代理服务器。 2、启动Burpsuite 3、在BurpSuite界面中点击“Proxy”->“Options“设置代理 4、在BurpSuite界面中点击“Proxy”->“Intercept“,默认intercept功能是启动的。如果intercept is Off表示关闭,点击一下即可启动。 5、BurpSuite界面中点击Forward放行数据包,点击Drop丢弃数据包。 Burpsuite截获请求 1、在BurpSuite界面中点击“Proxy”->“Intercept“ 2、火狐浏览器访问 http://192.168.1.64/sqli-labs/ 页面 3、截获请求信息 SQL报错 POST方式联合查询 1、启动Burpsuite截获请求 2、burpsuite对数据包进行修改,空白处点击右键选择Send to Repeater。Repeater是靠手动操作发送单独的HTTP请求,并可以随时多次分析应用程序响应的工具。 其中&并非是SQL语句中的&,只是HTTP 请求包格式

SQL注入之Sqli-labs系列第三关和第四关(单双引号括号闭合)

邮差的信 提交于 2020-03-22 19:57:23
废话不在多说 let's go! 继续挑战第三关(Error Based- String (with Twist))和第四关( Error Based- DoubleQuotes String ) 1.访问地址,加入参数后 and 1=1和and 1=2进行测试,木有任何动静 2.再使用 ' 出现报错,同样的拿出来分析下 从上面看,多了个单引号和括号,这样就比较好办了, 直接闭合,输入1=1 1=2 开干 开始order by查询字段数,测试后正确数为3 union select联合查询,加入-号促使报错 查询数据库,版本信息,当前用户 爆出表名 爆出字段名 爆出数据 第三关和第四关是一样的,第四关是采用的 ")进行闭合,这里就演示 源代码: 来源: https://www.cnblogs.com/AmoBlogs/p/8665527.html

防止sql注入:替换危险字符

夙愿已清 提交于 2020-03-22 06:36:02
在用户名或者密码框中输入“11‘ or ’1‘ = '1”时,生成的sql语句将为“selec * from userInfo where name = '11' or '1' = '1' and pwd = '11' or '1' = '1'”;该语句永远为真。为了防止sql语句的注入,提高程序的安全性。需要替换危险字符。 Java代码段: public class Checkstr { public String dostring(String str){ str=str.replaceAll(";",""); str=str.replaceAll("&","&amp;"); str=str.replaceAll("<","&lt;"); str=str.replaceAll(">","&gt;"); str=str.replaceAll("'",""); str=str.replaceAll("--",""); str=str.replaceAll("/",""); str=str.replaceAll("%",""); return str; } } 来源: https://www.cnblogs.com/tbyang/p/3362889.html

三大措施将SQL注入攻击的危害最小化

☆樱花仙子☆ 提交于 2020-03-21 06:45:05
使用用户提供的数据进行 数据库 查询的任何应用程序是SQL注入攻击的一个潜在目标。数据库管理员可能无法完全阻止针对其数据库服务器的SQL注入式攻击;但是,管理员们和应用程序开发人员可以做一些事情,将这些攻击的影响最小化。那么 数据库 管理 员可以做什么呢? 不要让数据库和Web服务器放在同一台计算机上。 使用防火墙或不可路由的IP地址来阻止到数据库的互联网访问。一旦配置完毕,来自数据库服务器的数据包将不能被转发到互联网。在Web服务器上需要添加一条路由,这样才能找到数据库服务器。 配置可信任的IP接入和访问(例如,IPSEC),以控制哪些机器能够与数据库服务器通信。 从数据库服务器上移除所有的示例脚本和应用 程序 。 为每一个应用程序的数据库连接账户使用一个专用的低特权账户。不要使用sa、dba、admin。 不要准许用户或应用程序直接访问数据库表。要使用对数据库拥有有限访问的应用程序 角色 。如果应用程序仅需要读取访问,就要将数据库的访问限制为只读。 从生产数据库中移除未用的存储过程。 将对应用程序的访问仅授权给 用户 创建的存储过程。 不要将应用程序的“_ANY_”授权给操作系统命令或系统存储过程。 应用程序的 设计 人员可以做什么呢? 程序设计人员肩负着保障Web应用程序安全的重要责任。在设计和编码阶段加强安全审察才是杜绝程序漏洞的关键。大体而言

JDBC学习笔记(4)——PreparedStatement的使用

亡梦爱人 提交于 2020-03-20 22:02:00
PreparedStatement public interface PreparedStatement extends Statement;可以看到PreparedStatement是Statement的子接口,我们在执行查询或者更新数据表数据的时候,拼写SQL语句是一个很费力并且容易出错的事情,PreparedStatement可以简化这样的一个过程. PreParedStatement 1).why?我们为什么要使用它 使用Statement需要进行拼写SQl语句,辛苦并且容易出错,之前使用Statement的SQL语句的形式是这样的 String sql = "insert into examstudent" + " values(" + student.getFlowId() + "," + student.getType() + ",'" + student.getIdCard() + "','" + student.getExamCard() + "','" + student.getStudentName() + "','" + student.getLocation() + "'," + student.getGrade() + ")"; 使用PreparedStatement:是Statement的子接口,可以传入 带占位符 的SQL语句

JDBC中的Statement和PreparedStatement的区别

倾然丶 夕夏残阳落幕 提交于 2020-03-20 21:14:59
PreparedStatement是什么? PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快; public class PreparedStmtExample { public static void main ( String args [ ] ) throws SQLException { Connection conn = DriverManager . getConnection ( "mysql:\\localhost:1520" , "root" , "root" ) ; PreparedStatement preStatement = conn . prepareStatement ( "select distinct loan_type from loan where bank=?" ) ; preStatement . setString ( 1 , "Citibank" ) ; ResultSet

PreparedStatement 与 Statement

痴心易碎 提交于 2020-03-20 21:14:45
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还经常会在Java面试被提及,譬如:Statement与PreparedStatement的区别以及如何避免SQL注入式攻击?这篇教程中我们会讨论为什么要用PreparedStatement?使用PreparedStatement有什么样的优势?PreparedStatement又是如何避免SQL注入攻击的? PreparedStatement是什么? PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子: 1 2 3