网络安全:OWASP防护守则

目录

一、OWASP十大WEB弱点防护守则

二、防护守则

1、权限控制失效

2、加密失误

3、注入

4、不安全设计

5、安全配置缺陷

6、易受攻击和过时的组件

7、身份认证和会话管理失效

8、缺乏完整性校验

9、缺乏监控与日志记录

10、服务端请求伪造

三、核心防护原则总结


一、OWASP十大WEB弱点防护守则

OWASP Top 10 是目前全球最权威、最具影响力的Web应用安全风险清单,由开放Web应用安全项目(OWASP)定期更新(2021版)。

排名风险名称简述
A01Broken Access Control权限控制失效,导致用户可以访问未授权的数据或功能。
A02Cryptographic Failures加密失误,如未加密敏感数据或使用不安全的算法(旧称“敏感数据泄露”)。
A03Injection注入,包括 SQL、NoSQL、命令注入等,攻击者通过恶意输入操控后端。
A04Insecure Design不安全设计,应用本身的设计缺陷,未考虑安全机制。
A05Security Misconfiguration安全配置缺陷,配置错误或默认设置未更改,导致系统暴露。
A06Vulnerable and Outdated Components易受攻击和过时的组件,使用了已知漏洞的软件组件,如库、框架。
A07Identification and Authentication Failures身份认证和会话管理失效,身份验证机制不当,如弱密码、暴力破解。
A08Software and Data Integrity Failures缺乏完整性校验,例如更新过程未验证签名。
A09Security Logging and Monitoring Failures缺乏监控与日志记录,无法及时响应攻击。
A10Server-Side Request Forgery (SSRF)服务端请求伪造,服务器被诱导请求外部资源,可能造成内网信息泄露。

二、防护守则

1、权限控制失效

  • 强制实施最小权限原则: 默认拒绝所有访问,明确授予每个用户/角色执行其任务所需的最小权限。

  • 集中化访问控制检查: 在服务器端使用统一的、经过严格测试的授权机制(如RBAC, ABAC),避免在客户端进行关键权限判断。

  • 禁用目录列表: 确保Web服务器不会列出目录内容。

  • 记录和监控访问失败: 记录失败的授权尝试并设置告警(尤其是管理员操作)。

  • API速率限制: 防止暴力破解和数据枚举。

  • 强制所有权检查: 对访问对象(如文件、数据库记录)的操作前,必须验证当前用户是否拥有该对象(/users/{id} 中验证 {id} 属于当前用户)。

  • 唯一、不可预测的访问令牌: 使用JWT时设置短有效期,注销时使其失效。

2、加密失误

  • 敏感数据加密: 对传输中的敏感数据(密码、个人信息、支付信息、健康数据等)强制使用强TLS(最新版如TLS 1.3),对存储的敏感数据使用强加密算法(如AES-256)和安全的密钥管理(HSM/KMS)。

  • 禁用旧协议/弱算法: 禁用SSL、早期TLS版本、弱密码套件(如RC4, DES, MD5, SHA1)。

  • 使用强哈希存储密码: 使用自适应哈希算法(如Argon2id, scrypt, bcrypt, PBKDF2)并加盐。

  • 禁止缓存敏感数据: 在HTTP响应头设置 Cache-Control: no-store

  • 最小化数据收集和存储: 只收集和存储业务绝对必需的敏感数据,及时删除不再需要的数据。

  • 避免在代码/配置中硬编码密钥: 使用安全的密钥管理系统。

3、注入

  • 使用安全的API: 优先使用提供自动参数化或安全对象关系映射(ORM)的API。绝对禁止拼接查询/命令。

  • 参数化化查询: 对SQL、NoSQL、OS命令、LDAP查询等所有解释型语句,使用参数化查询(预编译语句)或存储过程。

  • 输入验证与输出编码: 对不受信任的输入进行严格的、基于白名单的验证(类型、长度、格式、范围)。在将数据输出到不同上下文(HTML, JavaScript, CSS, URL, SQL)时,使用上下文相关的输出编码

  • 使用ORM框架的安全方法: 避免使用可能引入注入的拼接方法。

  • LIMIT 防止大规模数据泄露: 在SQL查询中使用LIMIT等子句限制返回行数。

4、不安全设计

  • 威胁建模: 在设计和开发生命周期早期(SDLC)进行威胁建模,识别潜在威胁并设计安全控制措施。

  • 安全设计模式: 采用成熟的安全设计模式和原则(如深度防御、最小权限、失效安全)。

  • 安全需求定义: 明确定义安全需求(如认证、授权、审计、加密、输入验证)。

  • 参考架构和安全控制库: 使用经过验证的安全参考架构和可重用的安全组件。

  • 安全编码标准与培训: 制定并强制执行安全编码标准,对开发人员进行安全培训。

  • 滥用案例建模: 考虑攻击者可能如何滥用应用功能,并设计相应的防护。

5、安全配置缺陷

  • 最小化安装: 移除不必要的功能、组件、文档、示例和未使用的账户。

  • 加固配置: 为操作系统、框架、库、应用程序设置安全、强化的配置(关闭调试模式、禁用管理接口、设置安全HTTP头如CSP, HSTS, X-Content-Type-Options等)。

  • 自动化配置管理: 使用自动化工具(IaC如Terraform, Ansible)确保开发、测试、生产环境配置一致且安全。避免使用默认凭据。

  • 及时更新和打补丁: 建立流程,及时更新和修补操作系统、框架、依赖库和应用程序。

  • 分离组件: 将不同安全级别的组件部署在隔离的网络分段或容器中。

  • 安全扫描: 定期进行配置审计和安全扫描。

6、易受攻击和过时的组件

  • 组件清单管理: 维护所有客户端和服务器端组件(框架、库、模块)及其版本的准确清单(使用SCA工具)。

  • 持续监控漏洞: 订阅安全通告(CVE),使用软件成分分析(SCA)工具持续监控组件漏洞。

  • 及时更新/打补丁: 仅从官方渠道获取组件,在评估风险后及时应用安全补丁或升级到安全版本。优先考虑有活跃维护的组件。

  • 移除无用/过时组件: 清理不再使用的依赖项。

  • 安全许可: 在引入新组件前进行安全评估和许可。

7、身份认证和会话管理失效

  • 实施强认证: 支持多因素认证(MFA),尤其是关键操作和高权限账户。防止弱密码(使用密码策略、密码强度检查器、阻止常见密码)。

  • 安全的会话管理: 使用服务器端生成的、长且随机的会话ID,通过安全Cookie传输(SecureHttpOnlySameSite 属性),设置合理的会话超时(空闲和绝对超时)。

  • 安全的密码管理: 使用强哈希存储密码(见A02),安全地处理密码重置/忘记流程(避免知识问答、发送明文密码),提供安全的密码更改功能。

  • 防止凭证填充/暴力破解: 实施账户锁定或递增延迟机制,记录失败尝试并监控。对登录尝试进行速率限制。

  • 统一错误消息: 登录、注册、密码找回等环节使用统一的模糊错误消息(如“用户名或密码错误”),避免枚举攻击。

8、缺乏完整性校验

  • 代码/配置完整性验证: 使用数字签名验证软件来源和完整性(如代码签名、容器镜像签名)。确保CI/CD管道安全,防止未授权修改。

  • 依赖来源可信: 只从官方、受信任的源获取依赖项和插件。验证其签名或哈希值。

  • 反序列化安全: 避免使用包含远程代码执行功能的危险反序列化器。如必须使用,实施严格的输入验证、类型限制(白名单)和沙箱隔离。

  • CI/CD安全: 保护构建管道,确保代码仓库、构建服务器的访问控制和安全配置。

  • 关键数据完整性保护: 对关键配置或数据使用数字签名或MAC(消息认证码)验证其未被篡改。

9、缺乏监控与日志记录

  • 记录关键安全事件: 确保记录登录(成功/失败)、访问控制失败、输入验证失败、系统错误、关键操作(如密码修改、权限变更)、API调用等。

  • 日志包含足够上下文: 日志条目应包含时间戳、源IP、用户标识、事件描述、操作结果等,便于调查。

  • 集中化日志管理: 将日志发送到受保护的、集中的日志管理系统(如SIEM),防止本地篡改或丢失。

  • 实时监控与告警: 建立实时监控机制,对可疑活动(如大量登录失败、异常数据访问模式)设置告警阈值,确保告警能被及时响应。

  • 定期审计与测试: 定期审计日志配置和内容,进行渗透测试验证监控的有效性。

  • 保护日志数据: 确保日志存储的安全性和完整性,控制对日志的访问权限。

10、服务端请求伪造

  • 输入验证与过滤: 对用户提供的URL或主机名/IP进行严格的基于白名单的验证和过滤。避免直接使用用户输入构造请求。

  • 网络层控制: 实施网络分段,将后端应用部署在隔离网络(DMZ),限制其只能访问必要的内部资源。使用防火墙策略限制应用服务器出站连接的目标地址和端口。

  • 应用层控制: 使用应用层代理或具有严格目标限制的API网关来转发请求。

  • 禁用非必要URL Schema: 仅允许 http/https,禁用 fileftpgopherdict 等危险schema。

  • 验证响应: 不要将原始响应直接返回给客户端,检查响应内容是否合法。

  • 使用受信解析库: 避免直接使用底层网络库处理用户输入。

三、核心防护原则总结

  • 纵深防御: 在多个层面实施安全控制。

  • 最小权限: 只授予完成任务所必需的最小权限。

  • 默认安全: 默认配置应是最安全的。

  • 永不信任用户输入: 对所有输入进行严格验证、过滤和输出编码。

  • 保持简单: 减少攻击面(移除不必要的功能、组件)。

  • 持续更新: 及时打补丁和升级。

  • 安全开发生命周期: 将安全融入设计、开发、测试、部署、运维全过程(DevSecOps)。

  • 监控与响应: 具备检测、响应和恢复能力。

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

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

相关文章

Dagster 实现数据质量自动化:6大维度检查与最佳实践

在当今数据驱动的世界中,数据质量的重要性不言而喻。数据质量测试是确保数据准确、完整、一致和可靠的关键步骤。本文将深入探讨数据质量测试的六大维度,并提供相关的检查方法和最佳实践。 什么是数据质量测试? 数据质量测试涉及评估数据以确…

计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 2. 摄像机标定

文章目录 1. 前置知识1.1. 非齐次线性方程组求解1.1.1. 传统求解方法1.1.2. 奇异值分解法1.1.3. 牛顿法或者梯度下降法 1.2. 齐次线性方程组的最小二乘解1.3. 非线性方程组的最小二乘解 2. 相机标定2.1. 相机内参数求解2.1.1. 求解 u 0 u_0 u0​ 和 v 0 v_0 v0​2.1.2. 求解 …

SQLLL

595-big-countries https://leetcode.com/problems/big-countries/description/ 面积最大的国家 -- select name, population, area from World where area > 3000000 or population > 25000000596-classes-with-at-least-5-students https://leetcode.com/problems/…

MySQL中触发器详解 触发器在自动化任务中的应用场景

触发器是mysql中与表关联的数据库对象,能在特定操作(如insert、update、delete)发生时自动执行预定义sql逻辑。其核心用途包括:1. 维护数据一致性,如订单插入后自动减少库存;2. 记录审计日志,如…

MySQL 8.0的数据库root用户默认无法远程登录,需要修改root的远程授权

mysql> grant all privileges on . to ‘root’‘%’; ERROR 1410 (42000): You are not allowed to create a user with GRANT mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quick…

​​MPI + OpenMP 环境配置指南(Windows/Linux)​

—— 让你的并行计算飞起来 🚀 1. 简介​​ ​​MPI (Message Passing Interface)​​:用于多机分布式并行计算(进程级并行)。​​OpenMP​​:用于单机多线程并行计算(线程级并行)。​​混合编…

新闻类鸿蒙应用功耗危机以及优化方案

🔋 ​​一、功耗痛点:新闻类应用成“续航杀手”​​ ​​后台进程失控​​ ​​高频刷新​​:未适配应用(如网易新闻、百度客户端)默认每30秒后台刷新内容,触发CPU持续唤醒,单设备日均耗电增加1…

【小工具】-Doxygen01

0、前言 参考帖子。 使用Doxygen Documentation Generator自动添加注释 Doxygen使用教程 代码注释规范之Doxygen 1、Doxygen介绍 Doxygen 是一个功能强大的开源文档生成工具,主要用于从源代码中自动提取注释并生成专业的 API 文档。它支持多种编程语言&#xff…

大模型Transformer触顶带来的“热潮退去”,稀疏注意力架构创新或是未来

1. 大模型退潮:裸泳者离场,创新者浮出水面 资本热潮逐渐冷却,大模型赛道正经历残酷洗牌。过去两年密集的“百模大战”,本质是商业模式的军备竞赛,用数据规模与参数数量掩盖技术同质化。当DeepSeek以61层精简架构挑战千…

Android编译时打印所有引用的so库路径

在app module build.gradle 最后添加脚本 tasks.whenTaskAdded { task -> println("test 11 task.name:"task.name) if (task.name.startsWith(merge) && task.name.endsWith(NativeLibs)) { task.doFirst { prin…

暴雨亮相2025中关村论坛数字金融与金融安全大会

6月10日,由中关村金融科技产业发展联盟与中关村互联网金融研究院主办的“2025中关村论坛系列活动——数字金融与金融安全大会”在中关村展示中心盛大召开。本次大会以“人工智能机遇:未来金融格局重塑及安全治理”为主题,汇聚政产学研各界精英…

mapstruct中的@Mapper注解详解

在MapStruct中,Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper)。MapStruct会在编译时自动生成该接口的实现类,完成对象之间的属性映射。以下是对Mapper注解的详细解析: 1.…

uniapp+vue2+h5图片下载保存,微信浏览器、非微信浏览器

小程序端 onDown() {// 检查相册权限uni.authorize({scope: scope.writePhotosAlbum,success: () > {this.downloadImage();},fail: () > {uni.showToast({title: "请授权相册权限",icon: "none"});}}); }, downloadImage() {common.request(post, …

NumPy 与 OpenCV 版本兼容性深度解析:底层机制与解决方案

在计算机视觉项目中,NumPy 和 OpenCV 的兼容性问题常被低估,实则暗藏复杂的技术陷阱。下面从底层机制深入剖析核心兼容性问题及解决方案: 一、内存布局冲突:数组连续性陷阱 问题本质: OpenCV 的 C 内核要求 连续内存块…

基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题

基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题 解决方案项目实战1、生产者服务1.1、RabbitConfig定义相关交换机及死信队列等配置数据1.2、TestController测试接口Controller 2、消费者服务2.1 BusinessQueueConsumer业务队列监听器2.2 DeadLetterConsu…

西安java面试总结1

这是我第二次的面试。其实第一次也算不上面试,去了让我手写了几道题,三道算法题,一道SQL题,两道逻辑思维题,做完之后也没看我的解答,随便看了一眼简历,觉得我是大二的,大三还有课&am…

【redis】线程IO模型

Redis线程IO模型 总结:在redis5.0及之前,redis线程io模型是单线程。那么Redis单线程如何处理那么多的并发客户端连接的?原因两点:1)非阻塞io 2)多路复用(事件轮询) 以下&#xff0…

进程间通信详解(三):Linux进程信号深度解析

文章目录 一、Linux进程信号核心概念1.1 信号本质1.2 关键术语1.3 Linux 信号机制的核心流程: 二、信号产生机制全景2.1 通过终端按键产生信号2.1.1 基本操作 2.2 调用系统命令向进程发信号2.2.1 kill 命令:向指定进程发送信号2.2.2 killall 命令&#x…

C++ 日志系统实战第五步:日志器的设计

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目代码编写收尾! 日志器类 (Logger) 设计(建造者模式) 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…

Spring Boot + MyBatis日志前缀清除方法

在 Spring Boot 结合 MyBatis 的应用中&#xff0c;清空日志前缀&#xff08;如 > 、< 等&#xff09;需要通过 自定义 MyBatis 的日志实现 或 修改日志模板 来实现。以下是两种常用方法&#xff1a; 方法 1&#xff1a;自定义 MyBatis 日志实现&#xff08;推荐&#xf…