● 网页篡改:通过操作数据库对特定网页进行篡改
●网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
●数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改
●服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统
●破坏硬盘数据,瘫痪全系统
一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。
3、经典SQL注入源码浅析
孙子兵法说“知己知彼,百战不殆”。只有了解了对手才能够更好的击败他!
采用靶场DVWA靶场low级别的SQL注入源码进行分析DVWA源码下载地址:http://www.dvwa.co.uk打开:DVWA\vulnerabilities\sqli\source\low。如下面的php代码所示。第一个红框使用的是 _ R E Q U E S T 的传输参数。 \_REQUEST的传输参数。 _REQUEST的传输参数。_REQUEST — HTTP Request变量默认情况下包含了 _ G E T , \_GET, _GET,_POST 和 _ C O O K I E 的数组。也就是说,再不关心是 g e t 过来的还是 p o s t ,总之要取得某一个键的值,就用 \_COOKIE的数组。也就是说,再不关心是get过来的还是post,总之要取得某一个键的值,就用 _COOKIE的数组。也就是说,再不关心是get过来的还是post,总之要取得某一个键的值,就用_REQUEST就可以了。主要的问题就是出现在第二个红色框, q u e r y = " S E L E C T f i r s t _ n a m e , l a s t _ n a m e F R O M u s e r s W H E R E u s e r _ i d = ‘ query = "SELECT first\_name, last\_name FROM users WHERE user\_id =‘ query="SELECTfirst_name,last_nameFROMusersWHEREuser_id=‘id’;"; 这段代码采用的是 _ G E T 传输的方式,直接将参数 \_GET传输的方式,直接将参数 _GET传输的方式,直接将参数name拼接到了数据库查询语句中了,没有做任何处理。由此根据代码也可以断定,这将可能导致一个字符型的SQL注入,也就是GET类型的注入。
举两个简单的例子:
1、$id为用户输入需要查询的条件,而SQL语法是引号双双闭合的,如果输入一个单引号,就会出现语法报错
2、如果输入1 or 1=1,系统判定为或逻辑,只要有一个条件为真就会输出查询结果,显然1=1是为真的,系统就会查询出对应信息
4、如何防御
1、PreparedStatement(简单而有效的方法)
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
使用好处:
(1).代码的可读性和可维护性.
(2).PreparedStatement尽最大可能提高性能.
(3).最重要的一点是极大地提高了安全性.
原理:
SQL注入只对SQL语句的准备(编译)过程有破坏作用
而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,
而不再对SQL语句进行解析,准备,因此也就避免了SQL注入问题.
2、字符串过滤
比较通用的一个办法:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-1713430406945)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!