如何理解SQL注入原理

    基础概念
        SQL注入(SQL Inject)指的是web应用程序对用户输入数据的合法性没有判断或过滤不严格,使得攻击者能够在web应用程序中事先定义好的查询语句的结尾添加额外的SQL语句。这些额外的SQL语句能够在管理员不知情的情况下执行,从而欺骗数据库服务器执行非授权的任意查询,进一步获取相应的数据信息。

    工作原理
        用户输入:攻击者通过Web表单、URL、cookie等途径输入恶意数据
        数据拼接:将用户输入的数据与SQL查询语句进行拼接,改造成完整的SQL语句
        执行查询:应用程序将拼接后的SQL语句发送给数据库服务器执行
        获取结果:如果拼接的SQL语句包含恶意内容,服务器可能会执行非预期的操作,如读取、修改或删除数据,甚至执行系统命令


    产生条件
        传递给后端的参数是可控的
        参数内容会被直接带入到数据库查询
        变量未过滤或者过滤不严谨


    信息收集
        数据库名
        数据库用户
        数据库版本:根据版本查已公布的漏洞
        操作系统
        其他:如服务器文件路径


    常用函数
        # 一些SQL注入常用的函数

version()                 # 查看数据库版本
database()                # 查看当前数据库名
user()                    # 查看当前数据库用户
system_user()             # 查看系统用户名
group_concat()            # 把数据库中的某列数据或某几列数据合并为一个字符串
@@datadir                 # 查看数据库路径
@@version_compile_os      # 查看操作系统

        information_schema信息元数据库关键字段说明:

schemata         # 用户创建的所有数据库的库名,关联字段名为 schema_name。
tables           # 用户创建的所有数据库的库名和表名,关联字段分别是 table_schema 和 table_name。
columns          # 用户创建的所有数据库的库名、表名、字段名,关联字段名分别为 table_schema、table_name、column_name。

        执行实例

# 查询所有的数据库名
select schema_name from information_schema.schemata limit 0,1
# 查询指定数据库security中的所有表名
select table_name from information_schema.tables where table_schema='security' limit 0,1
# 查询指定数据库security中的指定数据表users的所有列名
select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1

 

    攻击方式
        错误消息注入:利用系统错误或消息提示获取有用信息
        Union注入:利用Union运算符将多个查询结果组合在一起
        时间注入:利用SQL语句中的时间函数进行后台数据操作
        布尔盲注入:修改SQL语句的查询条件,通过布尔值(真/假)来获取敏感信息
        暴力查询:尝试所有可能的参数组合(比如账号+密码)执行非预期的数据库查询
        数据查询:information_schema查询数据库相关信息
        文件读写:存在魔术引号,可通过编码或宽字节绕过
        跨库注入:通过注入攻击代码来执行对其他数据库的操作


    防御措施
        输入合法性验证:对用户输入的数据进行严格的验证和过滤
        使用参数化查询:将SQL语句和数据分开处理,防止数据被解释为SQL命令
        避免动态拼接SQL语句:减少使用字符串拼接来构造SQL语句
        使用预编译语句:预编译语句能够确保数据的正确性和安全性
        定期更新和维护数据库软件:确保使用的数据库软件是最新的,包含最新的安全补丁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

API测试工具领域,Postman的10个最佳替换

Postman 赢得了流行且有效的 API 工具的声誉。然而,对于那些寻求更符合特定需求和偏好的替代方案的人来说,存在一些值得注意的选择。这些 Postman 替代方案提供了独特的特性和功能,可满足测试过程的各个方面的需求。 在本博客中,…

如何快速的在线编辑pdf?6个软件让你轻松编辑pdf

如何快速的在线编辑pdf?6个软件让你轻松编辑pdf 在线编辑PDF文件是一项非常方便的任务,以下是六款让您轻松进行在线PDF编辑的软件: 嗨动PDF编辑器:这是一个功能强大的PDF编辑器,可以帮助您快速编辑PDF文档&#xff…

Flutter 中的 SliverAnimatedList 小部件:全面指南

Flutter 中的 SliverAnimatedList 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它提供了丰富的组件来帮助开发者构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的滚动组件中,SliverAnimatedList 是一个特殊的组件…

封装了一个iOS对号成功动画

基本思路其实很简单,就是通过贝塞尔曲线画出路径,然后 使用CAShapeLayer 渲染路径,然后通过strokeEnd 动画实现 路径的效果,这里注意,这个过程中过遇到过一个问题,就是 对号动画完成之后,整个对…

Superset二次开发之更新 SECRET_KEY

SECRET_KEY 的作用 加密和签名:SECRET_KEY用于对敏感数据(如会话、cookie、CSRF令牌)进行加密和签名,防止数据被篡改。安全性:确保应用的安全性,防止跨站请求伪造(CSRF)攻击和会话劫持等安全问题。如何生成 SECRET_KEY openssl rand -base64 42 配置 SECRET_KEY 在sup…

【主动均衡和被动均衡】

文章目录 1.被动均衡2.主动均衡1.被动均衡 被动均衡一般通过电阻放电的方式,对电压较高的电池进行放电,以热量形式释放电量,为其他电池争取更多充电时间。这样整个系统的电量受制于容量最少的电池。充电过程中,锂电池一般有一个充电上限保护电压值,当某一串电池达到此电压…

uniapp 添加字体ttf

效果图如下 一、逻辑概述 在uniapp中使用字体,一共分成两种情况,一种是普通vue页面,一种是nvue页面引入字体。。 1.vue页面引入字体需要如下步骤 1. 先选择下载一种字体:字体格式一般为 ttf后缀名 黄凯桦律师手写体免费下载和在线…

Linux--EXT2文件系统

参考资料: linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境: Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…

Vue前端如何配合SpringBoot后端实现文件下载

从HTML页面下载文件是非常简单的,直接向后端发起请求,后端处理请求就可以了;但是如果前端使用Vue开发,那么实现文件下载就有些曲折:Vue前端本身作为服务端存在,为了实现下载就需要将请求通过代理转到后端服…

Java后端模拟面试 题集⑤

1.先作个自我介绍吧 面试官您好,我叫张睿超,来自湖南长沙,大学毕业于湖南农业大学,是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图像…

FreeRtos进阶——中断的内部逻辑

中断与非中断API的区别 BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait); BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWok…

Session+Redis,Token+Redis,JWT+Redis,用户身份认证,到底选择哪种更合适?

1三中方案的比较 在选择Session+Redis、Token+Redis、JWT+Redis这三种用户身份认证方案时,我们需要考虑各自的优势、劣势以及应用场景。以下是对这三种方案的详细分析和比较: 1. Session+Redis 优势: Session登录是一种在Web应用程序中用于跟踪用户状态的机制,通过在服务…

huggingface笔记:实例化大模型(Acclerate)

1 访问大模型的一个障碍:内存量 访问非常大的预训练模型的一个障碍是所需的内存量。当加载预训练的 PyTorch 模型时,通常会: 创建一个随机权重的模型。您的预训练权重。将这些预训练权重放入模型中。——>前两步都需要在内存中有模型的完…

MFC工控项目实例之二添加iPlotx控件

承接专栏《MFC工控项目实例之一主菜单制作》 在WIN10下使用Visual C 6.0 (完整绿色版)添加iPlotx控件的方法。 1、在资源主对话框界面点击鼠标右键如图选择插入Active控件点击进入。 2、选择iPlotx Contrlolh点击确定。 3、在对话框界面插入iPlotx控件。…

emp.dll文件丢失要怎么解决?荒野大镖客emp.dll修复方法分享

软件运行过程中经常遇到各种技术问题,其中之一就是动态链接库(DLL)文件丢失的现象。DLL文件是Windows操作系统中一个重要的组件,它包含运行多个应用程序所需要的代码和数据。因此,一个丢失的DLL文件,如“em…

《逆水寒》手游周年庆,热度不减反增引发热议

易采游戏网5月31日最新消息:随着数字娱乐时代的飞速发展,手游市场的竞争愈发激烈。在这样的大背景下,《逆水寒》手游以其独特的古风武侠世界和深度的社交体验,自上线以来便吸引了无数玩家的目光。如今,这款游戏迎来了它…

对象转为Map

方案一&#xff0c;Jackson String json objectMapperFace.writeValueAsString(contract);Map<String,Object> map objectMapperFace.readValue(json, Map.class);方案二 &#xff0c; apache BeanUtils Map<String,String> beanMap null;try {beanMap BeanUti…

MMrotate报错AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

使用MMrotate训练自定义数据集报错&#xff1a; AttributeError: ‘NoneType’ object has no attribute ‘shape’ 2024-05-31 17:48:06,121 - mmrotate - INFO - workflow: [(train, 1)], max: 12 epochs 2024-05-31 17:48:06,121 - mmrotate - INFO - Checkpoints will be …

记录【KVM更改br0网卡IP后,原来ip地址仍在问题】

问题描述 KVM桥接方式创建的虚拟机&#xff0c;因为修改了ifcfg网卡配置文件导致之前的ip地址仍存在&#xff0c;route -n后&#xff0c;默认网关仍是之前的配置 解决 virt-manager进入控制台 ip addr flush dev 网卡名启动网卡 systemctl start Networkmanager systemctl…

相同的树(oj题)

一、题目链接https://leetcxode-cn.com/problems/same-tree/ 二、题目思路 遍历整颗树&#xff0c;判断两棵树的每个位置的结点都相同。 每个结点的左右孩子结点都要综合判断 三、题解代码 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//如果两颗树的根结点…