当前位置: 首页 > article >正文

【web应用安全】关于web应用安全的几个主要问题的思考

文章目录

    • 防重放攻击
      • 1. **Token机制(一次性令牌)**
      • 2. **时间戳 + 超时验证**
      • 3. **Nonce(一次性随机数)**
      • 4. **请求签名(如HMAC)**
      • 5. **HTTPS + 安全Cookie**
      • 6. **幂等性设计**
      • **综合防御策略建议**
      • **注意事项**
    • XSS攻击以及防范
      • XSS攻击原理及防范方法详解
        • **一、XSS攻击原理**
        • **二、XSS攻击的危害**
        • **三、常见防范方法**
          • **1. 输入验证与过滤**
          • **2. 输出编码**
          • **3. 内容安全策略(CSP)**
          • **4. 安全Cookie属性**
          • **5. 避免危险API**
          • **6. 其他防御措施**
        • **四、防御示例**
        • **五、总结**
    • SQL注入攻击以及防范
      • SQL注入攻击原理及Java Web防御详解
        • 一、SQL注入攻击原理
        • 二、Java Web防御核心措施
          • 1. 参数化查询(PreparedStatement)
          • 2. 输入验证与过滤
          • 3. 最小权限原则
          • 4. 安全错误处理
          • 5. 使用ORM框架
          • 6. Web应用防火墙(WAF)
        • 三、防御措施优先级
        • 四、完整防御流程示例
        • 五、工具推荐

防重放攻击

在Web应用中,重放攻击(Replay Attack) 是指攻击者截获用户的有效请求后,重新发送该请求以伪造操作(如重复支付、越权访问等)。以下是防御重放攻击的常用方法及原理分析:

1. Token机制(一次性令牌)

  • 原理
    • 服务器生成唯一Token(如UUID),返回给客户端。
    • 客户端需在后续请求中携带该Token。
    • 服务器验证Token有效性后立即失效(如删除或标记为已使用)。
  • 实现
    // 登录后返回Token
    HTTP/1.1 200 OK
    Set-Cookie: csrf_token=abc123; HttpOnly; Secure// 请求需携带Token
    POST /transfer HTTP/1.1
    Cookie: csrf_token=abc123
    
  • 适用场景:表单提交、敏感操作(如转账)。

2. 时间戳 + 超时验证

  • 原理
    • 客户端在请求中添加当前时间戳(如 timestamp=1679800000)。
    • 服务器检查时间戳是否在合理范围内(如 ±5分钟内)。
  • 增强方案:结合Token使用,避免攻击者篡改时间戳。
  • 代码示例
    // 服务端验证逻辑
    long requestTime = request.getParameter("timestamp");
    long serverTime = System.currentTimeMillis() / 1000;
    if (Math.abs(serverTime - requestTime) > 300) { // 5分钟容忍窗口throw new SecurityException("请求已过期");
    }
    

3. Nonce(一次性随机数)

  • 原理
    • 客户端生成唯一随机数(Nonce),随请求发送。
    • 服务器记录已使用的Nonce,拒绝重复值。
  • 优势:无需服务器生成Token,适合分布式系统。
  • 注意:需结合签名(如HMAC)防止Nonce被篡改。

4. 请求签名(如HMAC)

  • 原理
    • 客户端使用密钥对请求参数签名(如 sign=HMAC(params + timestamp, key))。
    • 服务器验证签名有效性及时间戳。
  • 适用场景:API接口、无状态服务。
  • 示例
    # 客户端生成签名
    import hmac
    params = "amount=100&timestamp=1679800000"
    sign = hmac.new(b"secret_key", params.encode(), "sha256").hexdigest()# 服务端验证
    expected_sign = hmac.new(b"secret_key", params.encode(), "sha256").hexdigest()
    if request.sign != expected_sign:return "签名无效"
    

5. HTTPS + 安全Cookie

  • 作用
    • HTTPS加密传输内容,防止请求被截获。
    • 设置Cookie的 SecureHttpOnlySameSite 属性,限制跨站请求。
  • 配置示例
    # Nginx配置HTTPS
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;# Cookie安全属性
    Set-Cookie: session_id=xyz; Secure; HttpOnly; SameSite=Strict
    

6. 幂等性设计

  • 原理
    • 对关键操作(如支付)设计幂等接口,即使重复请求结果也一致。
    • 通过唯一交易号(idempotency_key)去重。
  • 实现
    POST /payment HTTP/1.1
    Idempotency-Key: req_12345
    

综合防御策略建议

  1. 敏感操作:使用Token + 时间戳 + 签名。
  2. API接口:Nonce + HMAC签名 + HTTPS。
  3. Web表单:CSRF Token + HTTPS。
  4. 支付场景:幂等性设计 + 双重验证(如短信验证码)。

注意事项

  • Token存储:避免将Token存储在本地存储(易被XSS攻击获取),优先使用Cookie的 HttpOnly 属性。
  • 时钟同步:时间戳方案需考虑客户端与服务端时间偏差(如NTP同步)。
  • 密钥管理:签名密钥需安全存储,避免泄露。

通过组合上述方法,可有效防御重放攻击,具体方案需根据业务场景和安全需求权衡。

XSS攻击以及防范

XSS攻击原理及防范方法详解

一、XSS攻击原理

XSS(Cross-Site Scripting)攻击的核心原理是:攻击者向网页中注入恶意脚本,当其他用户访问该页面时,浏览器会执行这些脚本。根据注入方式可分为三类:

  1. 存储型XSS

    • 恶意脚本被持久化存储在服务器端(如数据库、评论系统)。
    • 用户访问页面时,脚本从服务器加载并执行。
    • 示例:攻击者在论坛发帖时插入 <script>alert('XSS')</script>,所有查看该帖的用户都会触发弹窗。
  2. 反射型XSS

    • 恶意脚本通过URL参数传入,服务器未经处理直接反射回页面。
    • 示例:访问 http://example.com?search=<script>恶意代码</script>,页面直接渲染攻击脚本。
  3. DOM型XSS

    • 攻击脚本通过修改页面DOM结构直接执行,无需经过服务器
    • 示例:页面JS动态拼接用户输入内容到HTML,如 document.write(location.hash)
二、XSS攻击的危害
  • 盗取用户Cookie、Session信息。
  • 劫持用户账号、执行虚假交易。
  • 钓鱼攻击、传播恶意软件。
三、常见防范方法
1. 输入验证与过滤
  • 原则:不信任任何用户输入,包括URL参数、表单提交等。
  • 方法
    • 使用白名单机制(如只允许字母、数字)。
    • 过滤或转义特殊字符(如 <, >, &&lt;, &gt;, &amp;)。
    • 工具:HTML Purifier(PHP)、DOMPurify(JavaScript)。
2. 输出编码
  • 根据输出位置选择编码方式
    • HTML内容:转义 <, >, &
    • JavaScript代码:使用 JSON.stringify() 或专用库(如 js-xss)。
    • URL参数:使用 encodeURIComponent()
  • 示例
    // 安全输出到HTML
    const userInput = "<script>alert('XSS')</script>";
    element.innerHTML = userInput.replace(/</g, '&lt;').replace(/>/g, '&gt;');// 安全输出到JavaScript
    const data = { content: userInput };
    const safeJSON = JSON.stringify(data).replace(/</g, '\\x3c');
    
3. 内容安全策略(CSP)
  • 原理:通过HTTP头限制页面可执行的脚本来源。
  • 配置示例
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';
    
    • 禁止内联脚本(<script>...</script>)。
    • 仅允许指定域名的外部脚本。
4. 安全Cookie属性
  • 设置 HttpOnly:禁止JavaScript通过 document.cookie 访问Cookie。
  • 设置 Secure:仅通过HTTPS传输Cookie。
  • 设置 SameSite:防止跨站请求伪造(CSRF)。
5. 避免危险API
  • 禁用 innerHTMLouterHTMLdocument.write()
  • 改用 textContentinnerText 插入用户内容。
  • React/Vue:默认自动转义,避免使用 dangerouslySetInnerHTML
6. 其他防御措施
  • 自动转义库:使用模板引擎(如Handlebars、Jinja2)自动转义变量。
  • 子域名隔离:将用户内容存储在独立子域名,避免Cookie共享。
  • 定期审计:使用工具扫描XSS漏洞(如OWASP ZAP)。
四、防御示例
  1. 用户评论系统

    • 输入时过滤 <script>on* 事件属性。
    • 输出时使用HTML转义。
    • 启用CSP禁止内联脚本。
  2. 动态内容加载

    // 危险:直接拼接HTML
    document.getElementById('output').innerHTML = userContent;// 安全:使用DOM操作
    const div = document.createElement('div');
    div.textContent = userContent;
    document.body.appendChild(div);
    
五、总结

XSS攻击的本质是利用浏览器的信任机制执行恶意代码。防御需从输入过滤、输出编码、策略限制三方面入手,结合CSP、安全编程实践和现代框架特性,构建多层防御体系。

SQL注入攻击以及防范

SQL注入攻击原理及Java Web防御详解

一、SQL注入攻击原理

攻击者通过构造特殊输入参数,破坏原有SQL语句结构,执行恶意SQL代码。典型场景:

-- 正常查询
SELECT * FROM users WHERE id = 123;-- 攻击者输入:123 OR 1=1
SELECT * FROM users WHERE id = 123 OR 1=1; -- 返回全部用户数据
二、Java Web防御核心措施
1. 参数化查询(PreparedStatement)

原理:预编译SQL模板,用户输入作为参数绑定,杜绝拼接注入。

// 正确示例:使用PreparedStatement
String userInput = request.getParameter("id");
String sql = "SELECT * FROM users WHERE id = ?"; // 使用占位符?
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, userInput); // 安全设置参数try (ResultSet rs = pstmt.executeQuery()) {// 处理结果集}
}

关键点

  • ? 占位符确保输入被当作数据而非代码。
  • 自动处理特殊字符转义(如 ''')。
2. 输入验证与过滤

原则:拒绝非法格式,接受已知安全格式。

// 示例:验证数字型ID
String userInput = request.getParameter("id");
if (!userInput.matches("\\d+")) { // 仅允许数字throw new IllegalArgumentException("Invalid ID format");
}// 使用工具库(如Apache Commons Validator)
if (!NumericValidator.isInRange(userInput, 1, Integer.MAX_VALUE)) {// 处理非法输入
}

扩展验证

  • 邮箱:^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$
  • 手机号:^1[3-9]\\d{9}$
3. 最小权限原则
  • 数据库账户仅授予必要权限:
    • 查询账户:仅SELECT权限。
    • 避免使用rootsa账户。
4. 安全错误处理

禁止泄露敏感信息

try {// 执行数据库操作
} catch (SQLException e) {// 错误日志记录(非生产环境可关闭)logger.error("Database error occurred", e);// 返回通用错误信息response.sendError(500, "System error occurred");// 避免:response.getWriter().println("Error: " + e.getMessage());
}
5. 使用ORM框架
  • Hibernate/MyBatis 自动参数化:
    // Hibernate示例
    User user = session.get(User.class, userId); // 自动防注入
    
6. Web应用防火墙(WAF)
  • 部署如ModSecurity,拦截常见攻击模式:
    • 检测UNION SELECTSLEEP()等危险函数。
    • 限制请求频率。
三、防御措施优先级
  1. 参数化查询(必须实施)
  2. 输入验证(增强安全性)
  3. 最小权限(降低攻击影响)
  4. 错误处理(防止信息泄露)
  5. ORM/WAF(可选增强层)
四、完整防御流程示例
用户输入
验证格式?
返回错误
参数化查询
数据库执行
异常?
记录日志
返回通用错误
返回结果
五、工具推荐
  • 静态代码扫描:SonarQube、FindBugs
  • 动态测试:SQLMap、OWASP ZAP
  • 依赖检查:OWASP Dependency-Check

通过分层防御策略,结合代码级防护和基础设施防护,可有效抵御SQL注入攻击。

相关文章:

【web应用安全】关于web应用安全的几个主要问题的思考

文章目录 防重放攻击1. **Token机制&#xff08;一次性令牌&#xff09;**2. **时间戳 超时验证**3. **Nonce&#xff08;一次性随机数&#xff09;**4. **请求签名&#xff08;如HMAC&#xff09;**5. **HTTPS 安全Cookie**6. **幂等性设计****综合防御策略建议****注意事项…...

Git 基础入门:从概念到实践的版本控制指南

一、Git 核心概念解析 1. 仓库&#xff08;Repository&#xff09; Git 的核心存储单元&#xff0c;包含项目所有文件及其完整历史记录。分为本地仓库&#xff08;开发者本地副本&#xff09;和远程仓库&#xff08;如 GitHub、GitLab 等云端存储&#xff09;&#xff0c;支持…...

银行分布式新核心的部署架构(两地三中心)

银行的核心系统对可用性和性能要求均非常严苛&#xff0c;所以一般都采用两地三中心部署模式。 其中&#xff1a; 同城两个主数据中心各自部署一套热备&#xff0c;平时两个中心同时在线提供服务&#xff0c;进行负载均衡假如其中一个数据中心出现异常&#xff0c;则由另外一个…...

Spring 及 Spring Boot 条件化注解(15个)完整列表及示例

Spring 及 Spring Boot 条件化注解完整列表及示例 1. 所有条件化注解列表 Spring 和 Spring Boot 提供了以下条件化注解&#xff08;共 15 个&#xff09;&#xff0c;用于在配置类或方法上实现条件化注册 Bean 或配置&#xff1a; 注解名称作用来源框架Conditional自定义条件…...

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统&#xff0c;以下是在 Windows 10 上安装部署 MantisBT 的详细步骤&#xff1a; 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序&#xff0c;因此需要安装 Web 服务器&#xff08;如 Apache&#xff09;、PHP 和数据…...

9.4分漏洞!Next.js Middleware鉴权绕过漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;Next.js 存在一个授权绕过漏洞&#xff0c;编号为 CVE-2025-29927。攻击者可能通过发送精心构造的 x-middleware-subrequest 请求头绕过中间件安全控制&#xff0c;从而在未授权的情况下访问受保护…...

处理json,将接口返回的数据转成list<T>,和几个时间处理方法的工具类

接口或者其他方式返回json格式&#xff0c;也可以直接处理里边只有list的json数据 //第一种json格式&#xff0c;包含分页信息 {"code": 200,"msg": null,"data": {"records": [{"风速": "0.0","电流"…...

OpenCV图像拼接(5)图像拼接模块的用于创建权重图函数createWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::createWeightMap 是 OpenCV 库中用于图像拼接模块的一个函数&#xff0c;主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…...

linux 运行脚本命令区别

文章目录 chmod 赋予权限运行sh script.sh适用场景 bash script.shsource 或 . 脚本 chmod 赋予权限运行 chmod x script.sh # 赋予执行权限 ./script.sh # 直接执行创建新的子进程&#xff0c;不会影响当前 shell 的环境变量。#!&#xff08;Shebang&#xff09; 指…...

【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置

噩梦终结&#xff1a;Flutter 配安卓、鸿蒙、iOS 真机调试环境 问题背景 很多开发者在配置 Flutter 项目环境时遇到困难&#xff0c;尤其是在处理 Android、鸿蒙和 iOS 真机调试环境时。卓伊凡最近接手了一个项目&#xff0c;发现很多“专业程序员”在环境搭建上花费了大量时…...

C++11QT复习 (六)

类型转换函数和类域 **Day6-3 类型转换函数和类域****1. 类型转换函数&#xff08;Type Conversion Functions&#xff09;****1.1 概述****1.2 代码示例****1.3 关键优化** **2. 类域&#xff08;Class Scope&#xff09;****2.1 作用域 vs 可见域****2.2 代码示例****2.3 关键…...

区块链技术在投票系统中的应用:安全、透明与去中心化

区块链技术在投票系统中的应用:安全、透明与去中心化 【引言】 近年来,电子投票系统因其便捷性受到广泛关注,但随之而来的安全问题也屡见不鲜,如选票篡改、重复投票、数据泄露等。如何确保投票的公平性、透明度和安全性? 区块链技术或许是解决方案之一! 区块链的 去中…...

CTF类题目复现总结-[MRCTF2020]ezmisc 1

一、题目地址 https://buuoj.cn/challenges#[MRCTF2020]ezmisc二、复现步骤 1、下载附件&#xff0c;得到一张图片&#xff1b; 2、利用010 Editor打开图片&#xff0c;提示CRC值校验错误&#xff0c;flag.png应该是宽和高被修改了&#xff0c;导致flag被隐藏掉&#xff1b;…...

MetInfo6.0.0目录遍历漏洞原理分析

所需进行代码审计的文件路径&#xff1a; C:\phpStudy\WWW\MetInfo6.0.0\include\thumb.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\entrance.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\include\class\load.class.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\include…...

linux打包前端vue,后端springboot项目

第一步先对整个项目进行通过maven进行clean在进行compile 第二步直接进行打包package和install都可以 第三部把对应的jar放到服务器上 把jar包放到服务器上某个地址下&#xff0c;然后cd到这个目录下&#xff0c;然后执行命令 nohup java -jar ruoyi-admin.jar > springbo…...

Elasticsearch:使用 AI SDK 和 Elastic 构建 AI 代理

作者&#xff1a;来自 Elastic Carly Richmond 你是否经常听到 AI 代理&#xff08;AI agents&#xff09;这个词&#xff0c;但不太确定它们是什么&#xff0c;或者如何在 TypeScript&#xff08;或 JavaScript&#xff09;中构建一个&#xff1f;跟我一起深入了解 AI 代理的概…...

SQLAlchemy 支持特殊字符

postgresql 实践 pydantic 实践&#xff08;一&#xff09;基础 pydantic 实践&#xff08;二&#xff09;数据校验 SQLAlchemy 介绍与实践 SQLAlchemy 支持特殊字符 SQLAlchemy 支持特殊字符 1. 字符集介绍分析2. MySQL 支持特殊字符2.1. 更新 MySQL 字符集为 utf8mb42.2 更新…...

Docker 快速入门指南

Docker 快速入门指南 1. Docker 常用指令 Docker 是一个轻量级的容器化平台&#xff0c;可以帮助开发者快速构建、测试和部署应用程序。以下是一些常用的 Docker 命令。 1.1 镜像管理 # 搜索镜像 docker search <image_name># 拉取镜像 docker pull <image_name>…...

计算机网络 - OSI 七层模型

OSI 七层模型 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互联&#xff09;模型由 ISO&#xff08;国际标准化组织&#xff09; 制定&#xff0c;目的是为不同计算机网络系统之间的通信提供一个标准化的框架。它将网络通信划分为 七个层次&#xff0c;每…...

如何调整yarn.nodemanager.vmem-pmem-ratio参数?

调整 yarn.nodemanager.vmem-pmem-ratio 参数的步骤如下&#xff1a; 1. 打开 YARN 配置文件 找到 yarn-site.xml 文件&#xff0c;该文件通常位于 Hadoop 配置目录中&#xff0c;例如 /etc/hadoop/conf 或 /opt/module/hadoop-3.1.3/etc/hadoop。 2. 找到并修改 yarn.nodemana…...

自顶向下学习K8S--部署Agones

本文在本人博客&#xff0c;原文地址&#xff1a;http://viogami.tech/index.php/blog/346/ 我是gopher&#xff0c;离不开云原生&#xff0c;自然也逃不了理解docker和K8S这俩。今天抽空想玩下agones&#xff0c;进而对K8S有实践性的理解。 学一个新事物从底层理论学肯定是最…...

unity中Xcharts图表鼠标悬浮表现异常

鼠标悬浮在面板附近&#xff0c;只显示单独的一个项目 而且无论鼠标如何移动&#xff0c;根本没有效果。 解决方案&#xff1a; 需要在对应的Canvas上绑定主相机才可以 鼠标移动到项目上就有信息展示了...

2025年最新自动化/控制保研夏令营预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业&#xff0c;以下部分将介绍我在夏令营以及预推免期间发生经历和问题 东南大学苏州校区蒙纳士大学联培 东南大学苏州校区的项目算是一个比较小众的项目&#xff0c;是第一年在苏州校区&#xff0c;二三年到南京校区找导师&#xff08;不提供住宿自…...

【Java SE】包装类 Byte、Short、Integer、Long、Character、Float、Double、Boolean

参考笔记&#xff1a;java 包装类 万字详解&#xff08;通俗易懂)_java包装类-CSDN博客 目录 1.简介 2.包装类的继承关系图 3.装箱和拆箱 3.1 介绍 3.2 手动拆装箱 3.3. 自动拆装箱 ​4.关于String类型的转化问题 4.1 String类型和基本类型的相互转化 4.1.1 String —…...

口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析

一、系统架构与编程框架设计 口腔种植全流程人工智能导航系统的开发是一项高度复杂的多学科融合工程,其核心架构需在医学精准性、工程实时性与临床实用性之间实现平衡。系统设计以模块化分层架构为基础,结合高实时性数据流与多模态协同控制理念,覆盖从数据采集、智能决策到…...

小林coding-10道Java集合面试题

1.数组与集合区别&#xff0c;用过哪些&#xff1f;说说Java中的集合&#xff1f;Java中的线程安全的集合是什么&#xff1f;Collections和Collection的区别?集合遍历的方法有哪些&#xff1f; 2.List?讲一下java里面list的几种实现&#xff0c;几种实现有什么不同&#xff…...

Java 集合中ArrayList与LinkedList的性能比较

一、需求&#xff1a; 头部插入‌&#xff1a;向列表头部插入10万个整数。‌随机访问‌&#xff1a;从列表中间位置连续获取1万个元素。‌头部删除‌&#xff1a;从列表头部连续删除10万个元素。 二、 使用ArrayList与LinkedList测试 //常量定义&#xff0c;用于测试操作的次数…...

SQL问题分析与诊断(8)——前提

8.1. 前提 与其他关系库类似&#xff0c;SQL Server中&#xff0c;当我们对存在性能问题的SQL语句进行分析和诊断时&#xff0c;除了获取该SQL语句本身外&#xff0c;还需要获取SQL语句相应的查询计划及其相关的数据环境。这里&#xff0c;所谓数据环境&#xff0c;具体是指SQ…...

漏洞发现:AWVS 联动 XRAY 图形化工具.(主动+被动 双重扫描)

漏洞发现&#xff1a;AWVS 联动 XRAY 图形化工具. 漏洞发现是网络安全领域的关键环节&#xff0c;指通过技术手段识别计算机系统、网络设备或软件中存在的设计缺陷、配置错误或代码漏洞的过程。这些漏洞可能被攻击者利用&#xff0c;导致数据泄露、服务中断或权限提升等风险。…...

上门家政小程序实战,从0到1解决方案

一、逻辑分析 上门家政小程序主要涉及用户端和服务端两大部分。用户端需要实现服务浏览、预约下单、订单跟踪等功能&#xff1b;服务端则要处理订单管理、服务人员管理、数据统计等任务。以下是详细的功能模块分析&#xff1a; 用户注册与登录&#xff1a;用户通过手机号或第三…...