---恢复内容开始---

1) SQL 注入简介

  SQL 注入(SQL Injection) 就是利用某些数据库的外部接口将用户数据插入到实际的数据库操作语言(SQL)当中,从而达到入侵数据库乃至操作系统的目的。他的产生主要是由程序对用户输入的数据没有进行严格的过滤,导致非法数据库查询语句的执行。

2) 应用开发中可以采取的应对措施

  • PrepareStatement + Bind-Variable

    MySQL 服务器端并不存在共享池概念,所以在 MySQL 上使用绑定变量(Bind Variable)最大的好处主要是为了避免 SQL 注入,增加安全性。

    同样,使用注释 /* 或 # 让后续条件失效也可以防范。

    需要注意,PrepareStatement 语句是由 JDBC 驱动来支持的,在使用 PrepareStatement 语句的时候,仅仅做了简单的替换和转义,并不是 MySQL 提供了 PrepareStatement 的特性。对 Java、JSP 开发的应用,可以使用 PrepareStatement + Bind-Variable 来防止 SQL 注入,另外从 PHP 5开始,也在扩展的 MySQLI 中支持 PrepareStatement,所以在使用这类语言作数据库开发时,强烈建议使用 PrepareStatement + Bind-variable 来实现。

  • 使用应用程序提供的转换函数

    很多应用程序接口都提供了对特殊字符进行转换的函数,恰当的使用这些函数,可以防止应用程序用户输入使应用程序生成不期望的语句。

      MySQL C API: 使用 mysql_real_escape_string() API 调用

      MySQL++: 使用 escape 和 quote 修饰符

      PHP: 使用 mysql_real_escape_string() 函数(适用于 PHP 4.3.0版本)。从 PHP 5开始,可以使用扩展的 MySQLI,这是对 MySQL 新特性的一个扩展支持,其中的一个优点就是支持 PrepareStatement

      Perl DBI: 使用 placeholders 或者 quote() 方法

      Ruby DBI: 使用 placeholders 或者 quote() 方法

  • 自己定义函数进行校验

    如果现有的转换函数仍然不能满足要求,则需要自己编写函数进行输入校验。输入验证是一个很复杂的问题。输入验证的途径可以分为以下几种:

        整理数据使之变得有效

        拒绝已知的非法输入

        只接受已知的合法输入

    因此,如果想要获得最好的安全状态,目前最好的解决办法就是,对用户提交或者可能改变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验证。

转载于:https://www.cnblogs.com/microcat/p/6672987.html

MySQL--SQL中的安全问题相关推荐

  1. sql中当前日期加2个月_一文搞定Mysql日期时间函数

    总第184篇/张俊红 日期和时间函数部分也是我们日常工作中使用频率比较高的一部分.这一篇我们主要讲讲Mysql里面的日期时间相关的函数,不同数据库之间基本相同,只会有个别函数的差异.大家掌握一个数据库 ...

  2. mysql sql先后执行_MySQL中SQL语句执行顺序

    (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) ...

  3. mysql替换sql中rank函数_MySQL sql Rank()函数实现

    一字符串类 Ø  Concat函数:连接字符串 Ø  Instr函数:返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) Ø  字符串大小写转换[upper().u ...

  4. mysql语句中怎么去重复_mysql中删除重复记录sql语句

    在sql中我们经常会碰到有重复的一些数据,下面我来介绍在mysql中删除重复记录的多种方法,有需要的朋友可参考参考. 删除重复记录方法一: 1. 新建一个临时表 代码如下 复制代码 create ta ...

  5. 在SQL中检查约束-用MySQL和SQL Server语法示例解释

    The CHECK constraint is used to limit the value range that can be placed in a column. CHECK约束用于限制可以放 ...

  6. mysql sql查询json数据类型_SQL中的JSON数据类型

    SQL中的JSON数据类型 概述 MySQL支持原生JSON类型,使用JSON数据类型相较于将JSON格式的字符串存储在String型中的优势有: 存储时会自动验证JSON文本: 可以优化存储格式.存 ...

  7. Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数

    Mysql在sql中截取时间类型字段的年月日和时间 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式.我们使用 N ...

  8. c 使用mysql的语句_在 MySQL 数据库中使用C 履行SQL的语句

    与 PostgreSQL 类似,可运用许多不一样的言语来访问 MySQL,包括 C.C++.Java 和 Perl.从 Professional Linux Programming 中第 5 章有关 ...

  9. mysql语句中limt_mysql sql语句中的limit用法

    mysql sql语句中的limit用法 1.select * from tablename limit 100,15 从100条记录后开始(不包括第100条记录)取出15条记录 (实际取出的是第 1 ...

  10. SQL中查询MySQL的版本

    SQL中查询MySQL的版本 SELECT VERSION(); 查询结果:

最新文章

  1. python爬虫入门-python爬虫入门,8分钟就够了,最简单的基础教学!
  2. python--常用模块:collections 、time、random
  3. IE兼容CSS3圆角border-radius,box-shadow,text-shadow的方法
  4. linux服务之nagios
  5. 【项目源码分享】基于C++实现的小型数据库(Windows/Linux环境)
  6. Hive体系结构(三)元数据库与基本操作
  7. CosiWorksNew
  8. 江苏省计算机一级考试基础知识,江苏省计算机一级考试大纲及复习指南
  9. 基础知识(四)Dijkstra算法
  10. 【BUG提交】freemarker 使用Struts2标签问题
  11. 【动态规划】完全背包:整数划分(方案数)
  12. java简历包装项目经验,项目实战
  13. Windows Edge 下载软件被检测到病毒无法下载
  14. 强制删除被占用文件 windows
  15. 萤石云摄像头无设备序列号验证码解决办法
  16. qgis面图层周长面积计算(视频)
  17. 4x root 红米_小米红米Note4X获取root权限教程
  18. 陕西的饮食历史和特点
  19. sqlite数据库使用
  20. 欧美零售商的全渠道实践

热门文章

  1. 探寻浏览器渲染的秘密
  2. 存钱吃利息存邮政储蓄好还是农业银行好?
  3. 特斯拉超级充电桩亮相:充电5分钟能跑百公里
  4. 数据接口同步的同步方法
  5. mysql 2005开发版,SQL server 2019 开发版下载
  6. html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...
  7. php执行zip压缩,PHP执行zip与rar解压缩方法实现代码
  8. hadoop学习3 查找块的位置
  9. HMM前向算法,维比特算法,后向算法,前向后向算法代码
  10. License for package Android SDK Build-Tools 28.0.2 not accepted.(MAC)