MySQL 注入

  • 今天刚刚看到MySQL注入
    • 首先,先来了解一下,SQL注入到底是什么
    • 解决办法

今天刚刚看到MySQL注入

首先,先来了解一下,SQL注入到底是什么

在网上可以收到很多关于SQL注入的例子,我这里想说一下最
基本的。
1:最基本的查询
xml语句

select * from user where id = #{id};

查询接口:select 请求方式:GET 请求参数:id

@RequestMapping(value = "/select/{id}",method = RequestMethod.GET)

这就是一个最普通的,根据id查询user表中的id与输入的id对应的一行数据,同样这是一个简单的接口定义,但是存在SQL注入风险。

如果在浏览器输入

http://localhost:8080/select/1

发送这个请求相当于调用一个查询语句
正常情况下,应该返回一个id=1的文章信息。

但是存在问题:
当在浏览器输入时

http://localhost:8080/select/1=1

这就是一个SQL注入攻击了,可能会返回所有文章的相关信息。为什么会这样呢?
1=1永远是true,所有整个where语句永远是ture,所以where条件相当于没有加where条件,那么查询的结果相当于整张表的内容。

解决办法

那么有哪些方法可以解决这些问题呢?

1、严格检查输入变量的类型和格式

对于整数参数,加判断条件:不能为空、参数类型必须为数字

对于以上的xml语句:我们可以这么改写:

<select >
select * from user where <if test="id != null and id != ''">id = #{id}</if>//对id进行非空校验,如果为空会报错
</select>

同样的可以对接口编写进行修改

@RequestMapping(value = "/select/{id}",
method = RequestMethod.GET)public HttpServletResponseselect(@PathVariable Integer id){//select 方法函数//参数里对 id,进行拦截,只允许int类型通过
}

对于字符串参数,可以使用正则表达式进行过滤:如:必须为[0-9a-zA-Z]范围内的字符串

2)过滤和转义特殊字符

在username这个变量前进行转义,对 '、"、\ 等特殊字符进行转义,如:

userName = StringEscapeUtils.escapeSql(userName);

3)利用mysql的预编译机制

把sql语句的模板(变量采用占位符进行占位)发送给mysql服务器,mysql服务器对sql语句的模板进行编译,编译之后根据语句的优化分析对相应的索引进行优化,在最终绑定参数时把相应的参数传送给mysql服务器,直接进行执行,节省了sql查询时间,以及mysql服务器的资源,达到一次编译、多次执行的目的,除此之外,还可以防止SQL注入。具体是怎样防止SQL注入的呢?实际上当将绑定的参数传到mysql服务器,mysql服务器对参数进行编译,即填充到相应的占位符的过程中,做了转义操作。

这个就像我上面写的

select * from user where id = #{id};
//使用#{},#可以对id进行预编译
//而不能使用${},这是直接将${}里的值,赋值给id

小白的才疏学浅的总结就到这里了,感谢各位的阅读

MySQL 注入详解及其解决方法相关推荐

  1. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  2. Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )

    前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件,而当数据量增加之时,就需要将其存储至本地数据库了.Python访问数据库需要对应的接口程序,我们可以把接口程序理解为Pyth ...

  3. 使用selenium时遇到的报错selenium.common.exceptions.WebDriverException: Message: Service xxxxstaus:1详解及解决方法详解

    在开始之前,分享一下使用selenium常遇到的几个问题和报错: 1.首先就是版本问题的报错:selenium.common.exceptions.NoSuchWindowException: Mes ...

  4. MySQL幻读详解及解决方法

    1. 什么是幻读? 建立一张表如下: 按照下面步骤执行两个事务. 事务1: 事务2: 由此,可以把幻读理解为:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已 ...

  5. python引用numpy出错_引用numpy出错详解及解决方法

    numpy出错 解决方案 Problem: how to import numpy in subdirectory? Import error of numpy within subfolder. 错 ...

  6. csrf漏洞防御方案_CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻击 ...

  7. mysql sleep详解_sql注入详解(二)

    sql注入详解 4.检测方法 首先是判断能不能进行sql注入 是哪种sql注入 (1)数字型 ?id=1 and 1=1 返回成功?id=1 and 1=2 返回失败 这说明是数字型注入,或者叫整型注 ...

  8. 网络安全学习--008--SQL注入之Access数据库注入详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Access注入漏洞详解 一:注入漏洞分析 站库分类: 1.网站分类: 静态网页: 不依赖数据库 灵活性差,制作.更新.维护麻烦 交互 ...

  9. pandas读写MySQL数据库详解及实战

    pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...

最新文章

  1. Erlang列表操作里面的变量绑定规则
  2. php7 安装zendopcache,安装PHP加速插件ZendOpcache
  3. 人活系列Streetlights (秩)
  4. Cisco Adsl 详细配置
  5. mysql加锁6_MySQL优化(6):Mysql锁机制
  6. Linux权限管理的认知
  7. 分享一个凭实力赚钱例子,值得借鉴学习
  8. tf.nn.embedding_lookup,tf.variable系列变量
  9. 「收藏」其实是欺骗自己
  10. 用C语言统计给定文本文件中汉字的个数
  11. 我奋斗了18年不是为了和你一起喝咖啡。
  12. ubuntu php开发工具
  13. PAT-A1008(C/C++代码解析)
  14. paperswithcode 论文阅读与代码复现
  15. jy-12-SPRINGMYBATIS02——云笔记09-刘苍松
  16. python sys stdout_Python-如何将sys.stdout复制到日志文件?
  17. 别被“僵尸”吃掉大脑!学会用Kubernetes (K8s)思考
  18. 022 PHP获取从周一到周日的时间戳
  19. 局域网网上邻居无法访问问题的解决
  20. 经典语录:也许一个人在真正无可奈何的时候除了微笑也只好微笑了

热门文章

  1. 上航福州到上海航班改降虹桥机场
  2. 酷!圣诞节首发:给头像加圣诞帽小工具!
  3. 【转】牛逼闪闪的Ruby迭代器
  4. GBL610-ASEMI适配高端电源桥堆GBL610
  5. 【笔记】tomcat原理
  6. 重定向防止表单重复提交
  7. SQl的列操作(增加、修改、删除)
  8. 在envi做随机森林_异常检测怎么做,试试孤立随机森林算法(附代码)
  9. Vue踩坑 npm ERR code ELIFECYCLE
  10. Linux 使用 git 上传代码到 GitHub