SQL注入漏洞浅析及防御

一、什么是SQL注入漏洞
将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞。SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
二、SQL注入漏洞的危害
• 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
• 网页篡改:通过操作数据库对特定网页进行篡改。
• 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
• 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
• 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
• 破坏硬盘数据,瘫痪全系统。
一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。
三、DVWA靶场SQL注入源码浅析
孙子兵法说“知己知彼,百战不殆”,只有了解了对手才能够更好的击败他!经典SQL注入源码浅析,打开搭建的dvwa靶场,选择SQL injection,点击view source,弹出源码框
在这里插入图片描述

如下面的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,总之要取得某一个键的值,就用 COOKIEgetpost_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="SELECTfirstname,lastnameFROMusersWHEREuserid=id’;"; 这段代码采用的是 G E T 传 输 的 方 式 , 直 接 将 参 数 _GET传输的方式,直接将参数 GETname拼接到了数据库查询语句中了,没有做任何处理。由此根据代码也可以断定,这将可能导致一个字符型的SQL注入,也就是GET类型的注入。$id为用户输入需要查询的条件,而SQL语法是引号双双闭合的,如果输入一个单引号,就会出现语法报错
在这里插入图片描述

如果输入1 or 1=1,系统判定为或逻辑,只要有一个条件为真就会输出查询结果,显然1=1是为真的,系统就会查询出结果
在这里插入图片描述

四、如何防御
1、(简单又有效的方法)PreparedStatement
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
使用好处:
(1).代码的可读性和可维护性.
(2).PreparedStatement尽最大可能提高性能.
(3).最重要的一点是极大地提高了安全性.
原理:
SQL注入只对SQL语句的准备(编译)过程有破坏作用
而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,
而不再对SQL语句进行解析,准备,因此也就避免了SQL注入问题.
2、字符串过滤
比较通用的一个方法:
(||之间的参数可以根据自己程序的需要添加)
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入漏洞是Web应用程序常见的安全漏洞之一,以下是SQL注入漏洞防御及修复建议: 1. 输入验证:在Web应用程序中,所有输入数据都应该进行有效性验证和过滤,确保输入数据的合法性和安全性。包括对用户输入的特殊字符进行转义和过滤,例如单引号、双引号、反斜杠等。 2. 使用参数化查询:使用参数化查询可以有效避免SQL注入攻击。参数化查询将输入数据作为参数传递给数据库,而不是将输入数据直接拼接到SQL语句中。这样可以防止攻击者通过输入恶意SQL语句来控制数据库查询。 3. 最小权限原则:在数据库中,应该为每个应用程序用户分配最小的权限,以防止攻击者通过SQL注入攻击获取管理员权限或访问敏感数据。 4. 安全编程实践:开发人员应该掌握安全编程实践,避免编写容易受到SQL注入攻击的代码。例如,不要将输入数据直接拼接到SQL语句中,不要使用动态拼接SQL语句的方式等。 5. 安全审计和漏洞扫描:定期对Web应用程序进行安全审计和漏洞扫描,及时发现和修复SQL注入漏洞和其他安全漏洞。 6. 补丁和更新:定期更新Web应用程序和数据库的补丁和版本,确保系统和应用程序的安全性和稳定性。 以上是SQL注入漏洞防御及修复建议,需要综合考虑应用程序的具体情况和安全需求,采取有效的措施来保护Web应用程序的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值