永远不要相信前端传来的数据,对于资深开发者而言,这几乎是一种本能,无需过多解释。然而,初入职场的开发新手可能会感到困惑:为何要对前端传来的数据持有如此不信任的态度?难道人与人之间连基本的信任都不存在了吗?

API恶意调用
 

这种“恶意调用”是实现 SQL 注入攻击的一种常见途径,它展示了攻击者如何通过 URL 参数发起攻击。

再来看一个例子,假设有一个用户信息查询接口,前端会发送一个用户 ID 到后端,后端根据用户 ID 查询用户信息并返回。后端代码如下(未采用防御式编程):

from flask import Flask, request, jsonify i
mport sqlite3  app = Flask(__name__)  @app.route('/user', methods=['GET']) 
def get_user():     user_id = request.args.get('id')     conn = sqlite3.connect('example.db')     cursor = conn.cursor()     query = f"SELECT * FROM users WHERE id={user_id}"     cursor.execute(query)     result = cursor.fetchone()     conn.close()     if result:         return jsonify(result)     else:         return jsonify({"error": "User not found"}), 404  
if __name__ == '__main__':     app.run(debug=True)

在这个例子中,后端代码直接将用户输入的 user_id 拼接到 SQL 查询语句中,没有进行任何校验或处理。这使得该接口容易受到 SQL 注入攻击。

恶意调用示例:假设攻击者通过浏览器或其他工具向该接口发送以下请求:

GET /user?id=1 OR 1=1

生成的 SQL 查询语句将是:

SELECT * FROM users WHERE id=1 OR 1=1

由于 1=1 永远为真,这条查询语句会返回所有用户的信息,而不是只返回 ID 为 1 的用户信息。攻击者可以利用这种方式获取数据库中所有用户的信息,造成严重的安全问题。

由此可见,前端传来的数据并非绝对可靠。对于后端来说,这些数据就像未经筛选的原材料,其中可能夹杂着各种风险。因此,后端必须对前端传来的数据进行二次校验,这正是防御式编程的核心思想。

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

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

相关文章

基于 Spark 实现 COS 海量数据处理

上周在组内分享了一下这个主题, 我觉得还是摘出一部分当文章输出出来 分享主要包括三个方面: 1. 项目背景 2.Spark 原理 3. Spark 实战 项目背景 主要是将海量日志进行多维度处理; 项目难点 1、数据量大(压缩包数量 6TB,60 亿条数…

Unity3D 屏幕点击特效

实现点击屏幕任意位置播放点击特效。 屏幕点击特效 需求 现有一个需求,点击屏幕任意位置,播放一个点击特效。 美术已经做好了特效,效果如图: 特效容器 首先,画布是 Camera 模式,画布底下有一个 UIClic…

MCU编程

MCU 编程基础:概念、架构与实践 一、什么是 MCU 编程? MCU(Microcontroller Unit,微控制器) 是将 CPU、内存、外设(如 GPIO、UART、ADC)集成在单一芯片上的小型计算机系统。MCU 编程即针对这些…

Go语言--语法基础6--基本数据类型--数组类型(1)

Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的 原始类型例如整型、字符串或者自定义类型。相对于去声明number0,number1, ..., and number99 的变量,使用数组形式 numbers[0], …

左神算法之给定一个数组arr,返回其中的数值的差值等于k的子数组有多少个

目录 1. 题目2. 解释3. 思路4. 代码5. 总结 1. 题目 给定一个数组arr,返回其中的数值的差值等于k的子数组有多少个 2. 解释 略 3. 思路 直接用hashSet进行存储,查这个值加上k后的值是否在数组中 4. 代码 public class Problem01_SubvalueEqualk {…

自回归(AR)与掩码(MLM)的核心区别:续写还是补全?

自回归(AR)与掩码(MLM)的核心区别:用例子秒懂 一、核心机制对比:像“续写”还是“完形填空”? 维度自回归(Autoregressive)掩码语言模型(Masked LM)核心目标根据已生成的token,预测下一个token(顺序生成)预测句子中被“掩码”的token(补全缺失信息)输入输出输入…

后端开发两个月实习总结

前言 本人目前在一家小公司后端开发实习差不多两个月了,现在准备离职了,就这两个月的实习经历写下这篇文章,既是对自己实习的一个总结,也是给正在找实习的小伙伴以及未来即将进入到后端开发这个行业的同学的分享一下经验。 一、个…

Python基础(​​FAISS​和​​Chroma​)

​​1. 索引与查询性能​ ​​指标​​​​FAISS​​​​Chroma​​​​分析​​​​索引构建速度​​72.4秒(5551个文本块)91.59秒(相同数据集)FAISS的底层优化(如PQ量化)加速索引构建,适合批…

Windows下memcpy_s如何在Linux下使用

Windows下代码如下 memcpy_s(pLine->ppBuf[i], m_ColorLineByte, pIn nOffset, m_ColorLineByte); 方案 1:使用标准 memcpy 手动检查(最通用) // 检查参数有效性 if (pLine->ppBuf[i] nullptr || pIn nullptr || m_ColorLi…

2025年数学算法与自动化控制国际会议(ICMAAC 2025)

2025年数学算法与自动化控制国际会议(ICMAAC 2025) 2025 International Conference on Mathematical Algorithms and Automation Control 一、大会信息 会议简称:ICMAAC 2025 大会地点:中国长沙 审稿通知:投稿后2-3日…

C语言数组介绍 -- 一维数组和二维数组的创建、初始化、下标、遍历、存储,C99 变长数组

目录 1. 一维数组 1.1 数组的概念 1.2 一维数组的创建 1.3 一维数组的初始化 1.4 数组的类型 1.5 数组下标 1.5.1 数组元素的遍历 1.5.2 数组的输入 1.6 一维数组在内存中的存储 1.7 sizeof 计算数组元素个数 2. 二维数组 2.1 二维数组的创建 2.2 二维数组的初始…

SpringAI + DeepSeek大模型应用开发 - 进阶篇(上)

三、SpringAI 2. 哄哄模拟器 2.1 提示词工程 提示词工程(Prompt Engineering):通过优化提示词,使大模型生成尽可能理想的内容,这一过程就叫提示词工程。 (1)清晰明确的指令 谈谈人工智能 …

Spring Boot实现异常处理

Spring Boot 提供了多种灵活的方式实现异常处理,以下是核心方案和最佳实践: 一、基础异常处理方案 1. ControllerAdvice ExceptionHandler(全局处理) ControllerAdvice public class GlobalExceptionHandler {// 处理特定异常&…

【目标检测】IOU的概念与Python实例解析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Vue2中如何使用vue-print-nb打印功能

插件官网地址&#xff1a;vue-print-nb - npm 1.安装 npm install vue-print-nb --save 2.导入打印插件 //main.js import Print from vue-print-nb Vue.use(Print); 3.配置参数 4.页面使用 <div id"printDiv">打印内容</div><el-button v-print&…

Matplotlib快速入门

目录 基本使用 解决中文乱码 一个坐标系绘制多个图像 多个坐标系绘制 基本使用 什么是Matplotlib 是专门用于开发2D图表(包括3D图表)以渐进&#xff0c;交互式方式实现数据可视化 为什么要学习matplotlib 可视化是在整个数据挖掘的关键辅助工具&#xff0c;可以清晰的理解…

扣料不允许‘货物移动’

遇到了报错&#xff0c;不允许货物移动 以为又是和之前一样是订单已经关闭&#xff0c;看是领错料还是财务误关的原因&#xff0c;但是co03一看订单状态并没有关闭 原因就是这个CRTD 订单只是创建了&#xff0c;但是没有下达 找个正常的看看&#xff1a; 一般订单创建和下达都…

【AI】全新AI测试系列之二--------AI自动化测试,提高测试效率

目录 一、自动化测试 1、与手动测试对比 2、自动化测试流程 二、自动化测试环境搭建 三、web自动化使用AI的两种方式 1、利用DeepSeek快速生成脚本 2、pycharm集成通义灵码 四、通义灵码实战 1、使用提示词生成代码 2、使用pytest框架 前言&#xff1a;上一章节只要是…

npm包冲突install失败

--legacy-peer-deps是npm&#xff08;Node.js包管理器&#xff09;的一个命令行选项&#xff0c;主要用于解决依赖冲突问题。当安装依赖时&#xff0c;npm默认会严格检查peer dependencies&#xff08;对等依赖&#xff09;的版本兼容性&#xff0c;可能导致安装失败。启用此选…

68、数据访问-crud实验-删除用户完成

68、数据访问-crud实验-删除用户完成 以下是完成“数据访问-CRUD实验-删除用户”功能的一般步骤&#xff0c;以常见Web应用框架&#xff08;如Spring Boot MyBatis-Plus、Django、Ruby on Rails&#xff09;为例&#xff1a; #### 准备工作 - **数据库表设计**&#xff1a;确…