概念

一、什么是所谓的SQL注入呢?

以下解释来自百度百科:
  SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

二、这些都是官方属于,程序员最直观的就是直接上实例代码

下边我就使用原始的Jdbc操作数据库来模拟SQL注入的请求
1、SQL注入查询所有的用户信息
此时有个方法是按照用户名查询当前用户信息,理想状态下是只查询一个钥匙用户名不存在则返回空值。

String sql = "select id,telephone,address from user where user_name = "+ userName;

解释:看着好像也没啥毛病吧。。要是此时我将userName这个参数值传入 siri or 1 = 1 呢??看出问题了吧,这样这条sql的where条件就恒真了。相当于select * from user请求后我就可以拿到表中所有数据了,是不是又有点慌了。。

2、SQL注入删除表

String sql = "select id,telephone,address from user where user_name = "+ userName;

解释:还是用上边的sql进行演示,加入我传入userName的值为siri ; DROP TABLE user ;看出问题了吧,加一个分号就可以完整的写入其他可以执行的语句,看似是查询用户,分号后边的语句才是重点!!这个前提是需要知道你操作的表,大多数用户表还是user吧。要是再来个drop database;被攻击了你可以直接跑路了。。是不是又又有点慌了。。

3、SQL注入执行数据库中的函数*

String sql = "select id,telephone,address from user where user_name = "+ userName;

解释:通过SQL注入也可以执行数据库内部的函数。如userName传入 siri union select 1,1, sysdate();使用union 需要保证字段数量和返回的一致。再传入个siri union select 1,1, verison();查询当前数据库版本号,再传入一个union select 1,1, (SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata) schemaName;直接给你把当前用户左右库查出来了,删库还不容易吗。。是不是又又又有点慌了。。

三、 如何防止sql注入

sql注入通过演示的案例可以看到非常危险,肯定有成熟的解决方案喽
1、代码层防止sql注入攻击的最佳方案就是sql预编译(用的最多的)

String sql = "select id,telephone,address from user where user_name = ?";

(1)hibernate和原始jdbc可使用占位符这样我们传进来的参数就会被当作是一个userName,所以就不会出现sql注入了。
(2)mybatis中使用#{userName}获取值可以有效防止sql注入,在MyBatis中,${xxx}这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用${xxx}这样的参数格式。所以,这样的参数需要我们在代码中手工进行处理来防止注入。
【结论】在编写MyBatis的映射语句时,尽量采用#{xxx}这样的格式。若不得不使用${xxx}这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。

2、规定数据长度,能在一定程度上防止sql注入
一般SQL注入语句占的字符都很长,我们可以限制可输入文本的输入长度,还可以在输入框中限制特殊字符。如 ` & $ 等等

3、限制数据库权限
查询、新增、删除数据、删除表、删除库等操作进行严格的用户权限划分,可以有效的减小sql注入带来的危害。尤其是删除表、删除库这样的操作一般登录用户不给予权限就ok。

以上三个使用比较多,还有一些其他的比较少用的操作,稍作了解即可

4、SQL中限制SQL同时执行语句条数

5、纯数字的输入框限制只能输入数字等,手机号、银行卡号等进行格式的校验

6、避免直接响应一些sql异常信息,sql发生异常后,自定义异常进行响应

聊一下面试经常问的SQL注入相关推荐

  1. sql参数化还是被注入了_面试官问你 SQL 注入攻击了吗?

    目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击? 我这人有个想法,就是不管自己跳不跳槽,每 ...

  2. pl sql入门比较好的书_面试官问你SQL?这几本书足够了

    程序员书库(ID:CodingBook) 猿妹编译链接:https://www.lifewire.com/best-sql-books-4177471 结构化查询语言(Structured Query ...

  3. 面试必问之-SQL调优

    对于MySQL层优化我一般遵从五个原则: 减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO 返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io 减少交互次 ...

  4. 面试常问的sql语句

    创建数据库 create database databaseName 创建表 create table tableName (列名 数据类型,...) 查询 select * from tableNa ...

  5. SQL注入漏洞(原理篇)

    SQL注入是我安全入门学的第一个漏洞,这个漏洞怎么说呢,前期的学习单单记住那几个payload知道如何查库.查表.查列.查字段就可以做题目了.没办法,初学者零基础就是这样,从记忆开始再到逐渐理解结束, ...

  6. web漏洞开始,sql注入

    第十一天,web漏洞必懂知识点 这个图里面,右边的漏洞比左边的漏洞相对重要,因为在实战过程中,左边所产生的漏洞就比较少,我们学习网络安全呢就要做到他们的这些原理和危害. 比如sql注入漏洞是网站数据库 ...

  7. mysql注入内置函数_PHP面试之mysql内置函数,xss漏洞,sql注入

    面试被问到: 1. MySql有哪些常用聚合函数: count().sum().max().min().avg().group_concat() mysql还有常用的函数: (1)数值函数: Abs( ...

  8. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  9. 【266期】面试官问:为什么 SQL 要尽量避免使用 IN 和 NOT IN?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... IN 和 ...

最新文章

  1. 16.1、python初识面向对象(1)
  2. oracle analyze分区表,PostgreSQL Analyze分区表:主表与子表的统计信息问题
  3. jQuery:表格的奇偶行变色,jquery实例之表格隔一行
  4. TCP/IP 协议简单分析(建立连接握手过程)
  5. github上面如何编辑README
  6. 锐炬显卡可以linux吗,Intel Broadwell桌面CPU性能测试:Iris Pro 6200核显无敌了
  7. TensorFlow7-多元线性回归模型
  8. vue devtools 插件安装
  9. VSCode中使用vue项目ESlint验证配置
  10. 存储过程别忘了写最后一句话,别忘了类型转换
  11. 十大旗舰基金是怎样炼成的(主动权益)
  12. oracle替换字符串replace
  13. QTTabBar安装后不生效
  14. 案例:数据提取/数据获取/爬虫—工具篇—影刀
  15. keras中sample_weight的使用
  16. uva 1449 Dominating Patterns(AC自动机基本应用)
  17. 微信企业号 sdk java_基于Java spring框架的微信企业号开发中关于js-sdk的配置
  18. 中国越野汽车电子市场趋势报告、技术动态创新及市场预测
  19. 最长不含重复字符的子字符串(C++)
  20. XCP实战系列介绍16-XCP标定过程指令解析

热门文章

  1. mybatis倒叙排版
  2. 「Vue自我检验」Vue 组件进阶知识,你了解多少?
  3. Linux:开发:valgrind报错问题总结(2022新)
  4. 爬取小猪网的短租房信息
  5. ringbuff | 通用FIFO环形缓冲区实现库
  6. 如何处理前端js报错——容错处理的汇总
  7. html5保护环境作品,保护环境的绘画作品图片
  8. 三款过CE/FCC/SRCC认证USB接口双频WIFI模块
  9. 让IE浏览器支持HTML5标准的方法
  10. 关于计算机网络的好坏处的英语作文,关于网络的好处与坏处初二英语作文