Web安全:XSS、CSRF等常见漏洞及防御措施

news2025/6/8 17:19:50

Web安全:XSS、CSRF等常见漏洞及防御措施

一、XSS(跨站脚本攻击)

定义与原理
XSS攻击指攻击者将恶意脚本(如JavaScript、HTML标签)注入到Web页面中,当用户访问该页面时,脚本在浏览器端执行,从而窃取用户信息、劫持会话或篡改页面内容。根据注入方式和持久性分为:

  • 存储型XSS:恶意脚本存储在服务器数据库(如评论、留言板),持久存在,每次用户访问时触发。
  • 反射型XSS:通过URL参数(如https://example.com/search?q=<script>alert('XSS')</script>)注入,脚本反射到响应中,需用户点击恶意链接触发。
  • DOM型XSS:脚本通过修改页面DOM结构(如通过location.hashinnerHTML)执行,不依赖服务器端存储,但可能绕过传统输入过滤。

危害示例

  • 窃取Cookie:通过document.cookie获取用户身份信息,发送至攻击者服务器。
  • 钓鱼攻击:在页面中插入伪造的登录框,诱导用户输入账号密码。
  • 蠕虫传播:通过社交平台自动发送含恶意链接的消息,扩大攻击范围。

防御措施

  1. 输入/输出过滤与编码
    • 对用户输入(如表单、URL参数)进行严格校验,过滤或转义特殊字符(如<>转为&lt;&gt;)。
    • 输出时根据上下文使用HTML实体编码、JavaScript编码或URL编码。
  2. HTTP-only Cookie
    设置CookieHttpOnly属性,阻止JavaScript读取敏感Cookie(如Set-Cookie: session=XXX; HttpOnly),防止劫持会话。
  3. 内容安全策略(CSP)
    • 通过Content-Security-Policy头配置允许加载的资源源(如script-src 'elf'),禁止外部脚本执行。
    • 可细粒度控制scriptstyleimg等资源的来源,防止XSS注入。
  4. 上下文感知编码
    根据数据用途(HTML、JavaScript、CSS)选择不同的转义函数,避免二次注入(如富文本编辑器需更复杂的过滤逻辑)。
  5. 沙箱环境
    使用<iframe sandbox>JavaScript沙箱限制嵌入内容的权限,即使发生XSS也无法访问主页面上下文。

二、CSRF(跨站请求伪造)

定义与原理
CSRF攻击利用用户已登录的身份,在用户不知情的情况下,通过第三方网站发送恶意请求到目标站点(如转账、修改密码)。攻击关键在于:

  • 用户已通过认证,浏览器自动携带有效Cookie。
  • 目标站点未验证请求是否由用户主动发起。

经典场景
攻击者在恶意网站嵌入以下代码:

<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="amount" value="10000">
  <input type="hidden" name="toAccount" value="attacker">
</form>
<script> document.forms[0].submit(); </script>

当用户访问该页面时,浏览器自动向银行网站发送转账请求,若银行未验证CSRF令牌,则攻击成功。

防御措施

  1. CSRF令牌(同步令牌模式)
    • 服务器生成随机令牌(如_csrf参数或Cookie),嵌入到表单或请求头(如X-CSRF-Token)。
    • 服务器验证请求中的令牌与用户会话中的令牌一致。
  2. 双重提交Cookie
    • 将CSRF令牌同时存储在Cookie和请求参数中,服务器需同时验证两者匹配(防御部分浏览器不发送Referer的情况)。
  3. 验证Referer头
    • 检查请求是否来自合法域名(如Referer: https://example.com),但可被篡改或绕过(如移动应用请求常不带Referer)。
  4. SameSite Cookie属性
    • 设置CookieSameSite属性(StrictLax):
      • Strict:仅允许同站请求携带Cookie(完全阻止跨站请求)。
      • Lax:允许部分GET请求(如链接点击)携带,但POST等危险请求仍需CSRF令牌。
  5. 自定义请求头验证
    • 要求所有敏感请求携带自定义头(如X-Requested-With: XMLHttpRequest),服务器检查是否存在。

三、其他常见Web安全漏洞
  1. SQL注入
    • 原理:未对用户输入进行参数化查询,导致攻击者拼接恶意SQL语句(如' OR 1=1;--)。
    • 防御:使用预编译语句(如PreparedStatement)、避免动态拼接SQL、限制数据库用户权限。
  2. 文件上传漏洞
    • 原理:未验证上传文件类型或路径,导致攻击者上传Webshell(恶意脚本文件)。
    • 防御
      • 白名单验证文件扩展名与MIME类型。
      • 上传后服务器端二次检测(如文件头检查)。
      • 存储文件到非Web根目录,避免直接访问。
  3. SSRF(服务器端请求伪造)
    • 原理:应用通过用户提供的URL发起网络请求(如图片加载、文件下载),可被利用攻击内网资源。
    • 防御:限制请求白名单、检查URL是否包含内网IP、使用代理隔离内外部请求。
  4. 认证与会话管理漏洞
    • 弱密码/爆破:使用复杂密码策略、账户锁定机制。
    • 会话固定攻击:生成随机会话ID,避免用户可预测。
    • 过期未注销:设置合理会话超时时间,强制注销。
  5. 越权访问
    • 水平越权:攻击者访问其他用户数据(如/user/123改为/user/456)。
    • 垂直越权:低权限用户执行高权限操作(如普通用户修改管理员信息)。
    • 防御:基于角色权限控制(RBAC)、资源访问列表验证。

四、综合防御策略
  1. 安全开发流程
    • SDLC集成:在开发各阶段(设计、编码、测试、部署)引入安全评审、自动化扫描(如SAST、DAST)。
    • 代码审计:定期审查关键代码(如认证、数据库交互、文件处理)。
  2. 基础设施安全
    • Web应用防火墙(WAF):拦截常见攻击特征,但需避免误报。
    • HTTPS强制:使用TLS加密,防止中间人劫持。
    • 防火墙/入侵检测系统:限制入站流量,监控异常请求。
  3. 日志与监控
    • 记录关键操作日志(如登录、修改密码),实时分析异常行为(如高频请求、异常IP)。
    • 使用安全信息和事件管理(SIEM)系统聚合告警。
  4. 第三方组件管理
    • 定期更新依赖库,避免已知漏洞(如Log4j、Struts2)。
    • 使用漏洞扫描工具(如NPM Audit、Dependabot)检测组件风险。
  5. 用户安全意识培训
    • 教育用户识别钓鱼邮件、不点击未知链接、使用双因素认证。

五、实战建议
  • 漏洞扫描工具:使用Burp Suite、OWASP ZAP进行手动渗透测试,或集成Acunetix、Nessus自动化扫描。
  • 安全测试框架:采用OWASP Top 10作为漏洞检查基准,定期自查。
  • 应急响应计划:预设漏洞发现与修复流程,确保快速响应。

总结

Web安全是攻防对抗的持续过程,需从输入验证、权限控制、安全配置、持续监控等多维度构建防御体系。需保持警惕,及时跟进最新漏洞与修复方案,才能有效降低风险。

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

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

相关文章

计算机组成与体系结构:补码数制二(Complementary Number Systems)

目录 4位二进制的减法 补码系统 &#x1f9e0;减基补码 名字解释&#xff1a; 减基补码有什么用&#xff1f; 计算方法 ❓为什么这样就能计算减基补码 &#x1f4a1; 原理揭示&#xff1a;按位减法&#xff0c;模拟总减法&#xff01; 那对于二进制呢&#xff1f;&…

C#使用MindFusion.Diagramming框架绘制流程图(2):流程图示例

上一节我们初步介绍MindFusion.Diagramming框架 C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型-CSDN博客 这里演示示例程序: 新建Windows窗体应用程序FlowDiagramDemo,将默认的Form1重命名为FormFlowDiagram. 右键FlowDiagramDemo管理NuGet程序包 输入MindFusio…

【物联网-ModBus-RTU

物联网-ModBus-RTU ■ 优秀博主链接■ ModBus-RTU介绍■&#xff08;1&#xff09;帧结构■&#xff08;2&#xff09;查询功能码 0x03■&#xff08;3&#xff09;修改单个寄存器功能码 0x06■&#xff08;4&#xff09;Modbus RTU 串口收发数据分析 ■ 优秀博主链接 Modbus …

Java应用10(客户端与服务器通信)

Java客户端与服务器通信 Java提供了多种方式来实现客户端与服务器之间的通信&#xff0c;下面我将介绍几种常见的方法&#xff1a; 1. 基于Socket的基本通信 服务器端代码 import java.io.*; import java.net.*;public class SimpleServer {public static void main(String…

Python_day47

作业&#xff1a;对比不同卷积层热图可视化的结果 一、不同卷积层的特征特性 卷积层类型特征类型特征抽象程度对输入的依赖程度低层卷积层&#xff08;如第 1 - 3 层&#xff09;边缘、纹理、颜色、简单形状等基础特征低高&#xff0c;直接与输入像素关联中层卷积层&#xff08…

如何在mac上安装podman

安装 Podman 在 macOS 上 在 macOS 上安装 Podman 需要使用 Podman 的桌面客户端工具 Podman Desktop 或通过 Homebrew 安装命令行工具。 使用 Homebrew 安装 Podman&#xff1a; (base) ninjamacninjamacdeMacBook-Air shell % brew install podman > Auto-updating Hom…

小黑一层层削苹果皮式大模型应用探索:langchain中智能体思考和执行工具的demo

引言 小黑黑通过探索langchain源码&#xff0c;设计了一个关于agent使用工具的一个简化版小demo&#xff08;代码可以跑通&#xff09;&#xff0c;主要流程&#xff1a; 1.问题输入给大模型。 2.大模型进行思考&#xff0c;输出需要执行的action和相关思考信息。 3.通过代理&…

阿里云ACP云计算备考笔记 (4)——企业应用服务

目录 第一章 企业应用概览 第二章 云解析 1、云解析基本概念 2、域名管理流程 3、云解析记录类型 4、域名管理 ① 开启注册局安全锁 ② 域名赎回 第二章 内容分发网络CDN 1、CDN概念 2、使用CDN前后对比 3、使用CDN的优势 4、阿里云CDN的优势 5、配置网页性能优化…

ARM SMMUv3简介(一)

1.概述 SMMU&#xff08;System Memory Management Unit&#xff0c;系统内存管理单元&#xff09;是ARM架构中用于管理设备访问系统内存的硬件模块。SMMU和MMU的功能类似&#xff0c;都是将虚拟地址转换成物理地址&#xff0c;不同的是MMU转换的虚拟地址来自CPU&#xff0c;S…

hadoop集群datanode启动显示init failed,不能解析hostname

三个datanode集群&#xff0c;有一个总是起不起来。去查看log显示 Initialization failed for Block pool BP-1920852191-192.168.115.154-1749093939738 (Datanode Uuid 89d9df36-1c01-4f22-9905-517fee205a8e) service to node154/192.168.115.154:8020 Datanode denied com…

浏览器工作原理05 [#] 渲染流程(上):HTML、CSS和JavaScript是如何变成页面的

引用 浏览器工作原理与实践 一、提出问题 在上一篇文章中我们介绍了导航相关的流程&#xff0c;那导航被提交后又会怎么样呢&#xff1f;就进入了渲染阶段。这个阶段很重要&#xff0c;了解其相关流程能让你“看透”页面是如何工作的&#xff0c;有了这些知识&#xff0c;你可…

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面

&#x1f411; |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 &#x1f411; 文章目录 &#x1f411; |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 &#x1f411;♈前言♈♈调取Deepseek大模型♈♒准备工作♒♒调用API♒ ♈将模型嵌入到ui界面中♈♈…

pikachu靶场通关笔记20 SQL注入03-搜索型注入(GET)

目录 一、SQL注入 二、搜索型注入 三、源码分析 1、渗透思路1 2、渗透思路2 四、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入百分号单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取…

产品笔试专业名词梳理

目录 产品常识 四种常见广告形式 贴片广告 中插广告 信息流广告 横幅广告 BAT和TMD BAT TMD 付费渗透率 蓝海市场、红海市场 蓝海市场 红海市场 竞品研究 SWOT分析 SWOT分析的核心目的&#xff1a; SWOT分析的优点&#xff1a; SWOT分析的局限与注意事项&…

【前端】es6相关,柯里化

0. 严格模式 严格模式的概念从ES6引进。通过严格模式&#xff0c;可以在函数内部选择进行较为严格的全局或局部的错误条件检测。 MDN中严格模式的描述 严格模式通过抛出错误来消除了一些原有静默错误严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷&#xff1a;有时…

51单片机基础部分——矩阵按键检测

前言 上一节&#xff0c;我们说到了独立按键的检测以及使用&#xff0c;但是独立按键每一个按键都要对应一个IO口进行检测&#xff0c;在一些需要多按键的情况下&#xff0c;使用过多的独立按键会过多的占用单片机的IO资源&#xff0c;为了解决这个问题的出现&#xff0c;我们…

SpringBoot2.3.1集成Knife4j接口文档

首先要查看项目中pom文件里面有没有swagger和knife4j的依赖&#xff0c;如果有的话删除&#xff0c;加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…

容器安全最佳实践:云原生环境下的零信任架构实施

&#x1f4cb; 目录 引言&#xff1a;容器安全的重要性零信任架构基础理论云原生环境的安全挑战容器安全威胁模型分析零信任架构在容器环境中的实施关键技术组件与工具安全策略与最佳实践监控与响应机制案例研究与实施路径未来发展趋势 引言 随着容器技术和云原生架构的快速…

[BIOS]VSCode zx-6000 编译问题

前提&#xff1a;Python 3.6.6及以上版本安装成功&#xff0c;Python 3.6.6路径加到了环境变量# DEVITS工具包准备好 问题&#xff1a;添加环境变量 1&#xff1a;出现环境变量错误&#xff0c;“py -3” is not installed or added to environment variables #先在C:\Windows里…

CICD实战(二)-----gitlab的安装与配置

1、安装gitlab所需要的依赖包与工具 sudo yum install wget net-tools sudo yum install curl policycoreutils openssh-server openssh-clients postfix -y 2、配置清华源 vim /etc/yum.repo.d/gitlab-ce.repo[gitlab-ce] namegitlab-ce baseurlhttp://mirrors.tuna.tsin…