15.Mysql中的安全问题
15.SQL中的安全问题
15.1 SQL注入简介
SQL是用来和数据库交互的文本语言。
SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操作系统的目的。
产生的原因主要由于程序没有对用户输入数据进行严格的过滤,导致非法SQL语句的执行。
SQL注入可能的危害包括:读取、修改、删除数据,获取用户名、密码等信息,获取管理员权限等。
SQL注入很难防范,不能通过操作系统补丁、数据库升级、防火墙进行拦截。
例子:
select * from user where username='$username' and password='$password'
传入参数$username未进行校验时,传入username ' or '1=1,将导致sql被改写为:
select * from user where username='username' or 1=1 and password='password'
将导致用户名和密码全部失效。
或者 传入注释符 username '/*或username '#,将导致sql被改写为:
select * from user where username='username'/*
select * from user where username='username'#
导致密码失效。
15.2 应用开发中可以采取的应对措施
15.2.1 PrepareStatement+Bind-Variable(预编译+绑定变量)
在Mysql上使用绑定变量可有效避免SQL注入。
Java中preparedStatement可有效对单引号进行转义,从而导致非法输入的变量拼接成SQL后,导致SQL报错,防止SQL注入。
15.2.2 使用应用程序提供的转换函数
使用对特殊字符转换的函数来过滤特殊字符,如mysql_real_escape_string()。
15.2.3 自己定义函数进行校验
自行编写输入校验函数,使用正则表达式校验非法输入。
已知非法字符包括:' ; = ( ) /* */ % + "" > < -- [ ]
15.3 小结
MyBatis中要注意$符。
15.Mysql中的安全问题的更多相关文章
- 15 SQL中的安全问题
SQL中的安全问题 1.SQL注入 demo1: SELECT * FROM user WHERE username = ? AND password ...
- MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
原文地址:http://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是 ...
- 【转】MySql中的函数
原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...
- MySQL中的两种临时表
MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 ...
- 【转】MySQL中varchar最大长度是多少?
一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无 ...
- MySQL中存储过程+事件的使用方法
一.背景 将界面操作日志存储在MySQL数据库中的operationlog表中,如果该表不能自动备份,表中的数据会越来越多,影响速度.可以定期将表中数据备份到另外一个表中来解决. 二.解决方案 1.使 ...
- php实现只保留mysql中最新1000条记录
这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- mysql中数据类型的取值范围
mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...
- MYSQL中关于日期处理的函数
< DOCTYPE HTML PUBLIC -WCDTD HTML TransitionalEN> MySQL数据库中SQL语句中 关于日期.时间\时间戳的函数 一 MySQL 获得当 ...
随机推荐
- 使用Flash Media Server(FMS)录制mp4格式的视频
最近在做一个有关视频直播和点播的项目,客户的一个需求就是可以控制对直播流的录制,直播的实现采用的是Adobe的Flash Media Server,具体方式就是:视频采集端采集视频并编码->rt ...
- python 引用和对象理解(转)
引用和对象分离 从最开始的变量开始思考: 在python中,如果要使用一个变量,不需要提前进行声明,只需要在用的时候,给这个变量赋值即可 (这个和C语言等静态类型语言不同,和python为动态类型有关 ...
- HTML各种标签复习
<html> --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <bod ...
- yii 定义场景
定义场景可以限制对字段的增删改查操作
- vue路由传参
console.log( _this.$route.params.id)接收参数 <div class="baoming"><router-link :to=&q ...
- 2018面向对象程序设计(Java)第10周学习指导及要求
2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4) 学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...
- OTU(operational taxonomic units),即操作分类单元
转自http://www.dxy.cn/bbs/topic/35655953 1.OTU是什么? OTU(operational taxonomic units),即操作分类单元.通过一定的距离度量方 ...
- 解题2(IpIsSameSubNet)
题目描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据.子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”.利用子网掩码可以判断两台主机 ...
- Oracle 入门
一.安装Oracle 11g 服务端 服务端安装教程:https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html 二.安装客户端 客 ...
- centos7.2 +cloudstack 4.11 +KVM +ceph 安装配置(网卡带聚合)
系统安装,注意:管理节点版本是有要求的,配置为centos 7.2 最小安装版本(非最小化安装). 系统分区要求 /boot/efi 200MB / 100G /var 100G swap 0 其它给 ...