mysql防止sql注入的方法

发布时间:2020-08-25 14:07:29

来源:亿速云

阅读:98

作者:小新

这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

SQL Injection攻击具有很大的危害,攻击者可以利用它读取、修改或者删除数据库内的数据,获取数据库中的用户名和密码等敏感信息,甚至可以 获得数据库管理员的权限。如果能够再利用SQLServer扩展存储过程和自定义扩展存储过程来执行一些系统命令,攻击者还可以获得该系统的控制权。而且,SQL Injection 也很难防范。网站管理员无法通过安装系统补丁或者进行简单的安全配置进行自我保护,一般的防火墙也无法拦截SQL Injection 攻击。

mysql如何防止sql注入?

1. 普通用户与系统管理员用户的权限要有严格的区分。

如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?

由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。

那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,

2. 强迫使用参数化语句。

如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。

也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,

可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。

3. 多多使用SQL Server数据库自带的安全参数。

为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。

如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。使用Parameters集合的另外一个优点是可以强制执行类型和长度检查,范围以外的值将触发异常。

如果用户输入的值不符合指定的类型与长度约束,就会发生异常,并报告给管理员。如上面这个案例中,如果员工编号定义的数据类型为字符串型,长度为10个字符。而用户输入的内容虽然也是字符类型的数据,但是其长度达到了20个字符。则此时就会引发异常,因为用户输入的内容长度超过了数据库字段长度的限制。

4. 加强对用户输入的验证。

总体来说,防治SQL注入式攻击可以采用两种方法,

一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。

在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。

如可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,如拒绝一些特殊的符号。如以上那个恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。

在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。在不影响数据库应用的前提下,应该让数据库拒绝包含以下字符的输入。如分号分隔符,它是SQL注入式攻击的主要帮凶。如注释分隔符。注释只有在数据设计的时候用的到。一般用户的查询语句中没有必要注释的内容,故可以直接把他拒绝掉,通常情况下这么做不会发生意外损失。把以上这些特殊符号拒绝掉,那么即使在SQL语句中嵌入了恶意代码,他们也将毫无作为。

故始终通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。

5. 多层环境如何防治SQL注入式攻击

在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。

未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。

更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。如在客户端应用程序中验证数据可以防止简单的脚本注入。

但是,如果下一层认为其输入已通过验证,则任何可以绕过客户端的恶意用户就可以不受限制地访问系统。故对于多层应用环境,在防止注入式攻击的时候,需要各层一起努力,在客户端与数据库端都要采用相应的措施来防治SQL语句的注入式攻击。

关于mysql防止sql注入的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

mysql简单防注入_mysql防止sql注入的方法相关推荐

  1. mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  2. mysql 手工sql注入_【sql注入专题02】Mysql手工注入流程

    0x00 SQL注入的语句介绍 SQL注入的本质 sql注入的本质就是查询某个数据库下的某个表中的某些字段的内容,比如我们平时在数据库查询一条数据时操作. mysql> use security ...

  3. java 防止sql注入_Java中SQL注入以及如何轻松防止它

    java 防止sql注入 什么是SQL注入? (What is SQL Injection?) SQL Injection is one of the top 10 web application v ...

  4. Sql注入-1:sql注入基本原理

    目录 前言 一.SQL注入介绍 二.学习环境介绍 三.SQL注入原理 总结 前言 在网络安全领域中,sql注入是一个无法被忽视的关键点,曾经多少的网站都因此被攻破,直到现在很多网站依旧存在很多sql注 ...

  5. JDBC模拟SQL注入和避免SQL注入

    模拟用户登录 用户名:fdsa 密码:fdsa' or '1'='1 select * from t_user where login_name='fdsa' and login_pwd='fdsa' ...

  6. 【sql注入教程】SQL注入是什么?我们如何去玩转它

    [sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区   SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...

  7. 【网络安全入门】SQL注入是什么?SQL注入危害有哪些?

    SQL注入是当今最危险.最普遍的基于Web的攻击方式之一,那么你知道SQL注入危害有哪些吗?SQL注入的位置包括什么?具体内容请看下文: SQL注入是什么? SQL注入是比较常见的网络攻击方式之一,主 ...

  8. Mybatis-plus sql注入以及防止sql注入

    Mybatis-plus sql注入 以及防止sql注入 一.SQL注入是什么? SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的SQL语句中来改变查询结果,例如: ...

  9. OWASP TOP 10(2021)之注入漏洞(SQL注入和XSS注入)

    目录 一.SQL注入 1. 漏洞概述及原理 2. 漏洞可能造成的危害 3. 漏洞防范 4. SQL注入的分类与检测 5. 从攻击者的角度,如何绕过SQL注入防范呢? (1)对于关键字的绕过 (2)缓冲 ...

最新文章

  1. 全面掌握ISO8583报文协议
  2. c# java数据类型不同点
  3. 理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术
  4. C# 委托(Delegate)
  5. openresty开发系列22--lua的元表
  6. linux获取指定字符,shell 获取用户输入指定范围的单个字符的两种方法
  7. MQ 的本质是什么呢?
  8. 我的python学习之路_我的Python学习之路
  9. Pandas处理数据缺失值
  10. 《C++ Primer Plus(第六版)》(13)(第九章 内存模型和命名空间 笔记)
  11. 【Python3 SelectKBest 调用personer出现的错误】
  12. Java:ChronicleMap第3部分,快速微服务
  13. c++实现字符串类的封装
  14. Linux文件查找命令find,xargs详述
  15. 面试官问我:如何在 Python 中解析和修改 XML
  16. java swing 属性控件_Java Swing控件属性归纳
  17. 西南科技大学OJ题 最简单的C程序0612
  18. 目标检测的数据集制作一般流程(Pascal VOC标准格式)
  19. Qq也进入鸿蒙系统,鸿蒙系统完善进行中,手机QQ接入HMS不需要后台运行秒收信息...
  20. [历史随笔]帝国如风--元朝的另类历史

热门文章

  1. win10输入法中文模式全角半角切换bug解决
  2. 格式—C语言项目分文件
  3. 校招 | ​武汉旅游体育集团有限公司发布最新夏季招聘岗位
  4. 召集开源插件,唤醒demo工程
  5. 大话西游再创新高盗号木马趋之若鹜
  6. java基础笔试题一
  7. 怎样添加隐藏计算机用户名,电脑如何连接隐藏wifi_电脑如何查找隐藏wifi
  8. Object Detection--RCNN,SPPNet,Fast RCNN,FasterRCNN论文详解
  9. 不写代码的采集软件,批量采集租房信息
  10. 使用Divi创建在线学习管理 (LMS) 网站