代码审计——XSS详解

news2024/11/15 21:22:59

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓

    • 01 漏洞描述
    • 02 审计要点
    • 03 漏洞特征
    • 04 漏洞案例
    • 05 修复方案

01 漏洞描述

跨站脚本攻击(Cross Site Script)是一种将恶意JavaScript代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。

在这里插入图片描述

攻击者利用应用程序的动态展示数据功能,在html页面里嵌入恶意代码。当用户浏览该页之时,这些嵌入在html中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的。

跨站脚本攻击有以下攻击形式:

1、反射型跨站脚本攻击

攻击者利用社会工程学等手段,发送一个URL链接给用户打开,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。

2、存储型跨站脚本攻击

攻击者利用应用程序提供的录入或修改数据的功能,将数据存储到服务器或用户cookie中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本,所有浏览者都会受到攻击。

3、DOM跨站脚本攻击

由于HTML页面中,定义了一段JS,根据用户的输入,显示一段HTML代码,攻击者可以在输入时,插入一段恶意脚本,最终展示时,会执行恶意脚本。

DOM跨站脚本攻击和以上两个跨站脚本攻击的区别是,DOM跨站是纯页面脚本的输出,只有规范使用JavaScript,才可以防御。
<br

这里是引用

02 审计要点

XSS漏洞发生的根本原因是"用户可控的"、”未经净化“的数据直接在HTML页面上展示。

“用户可控数据”可能来源于http请求、数据库、Http Header或cookie等,当明确用户可控数据,可以输出至前端页面时,判断代码中是否存在以下防护逻辑,若均不符合,则存在问题的风险递增。

1、前端是否有XSS防护框架,如Angularjs、Recat、vue.js等,一般这种防护框架在项目设计初期就要考虑到了,不然上线后再进行改动,耗时耗力,不切合实际情况。

2、用户输入数据时是否存在全局参数过滤器?过滤规则是否符合要求?是否存在需过滤和不需过滤两种输出,页面是否控制恰当?

3、输出内容在前端时是否进行恰当的编码(HTML、JS等)?

03 漏洞特征

一、缺陷代码示例(反射型XSS)

Java

<%out.print(request.getParameter("param")); %>

在上面的代码中,直接将从请求参数中获取到的param参数值在页面中输出,可导致反射型XSS漏洞。

PHP

  if($_ GET ["openid"]) echo $_ GET ["oauth_ signature"] ;

在上面的代码中,参数入口为用户提交的http get型请求数据,为用户可控,且经过echo输出函数在页面中输出,导致反射型XSS。

.Net

Default.aspx.cs:
public partial class _Default : System.Web.UI.Page
{
    public string commonXSS;
    protected void Page_Load(object sender, EventArgs e)
    {
        string commonXSS = Request.QueryString["UserInputData"];
        //假设用户输入:UserInputData="<script>alert(123)</script>";
        
    }
}

Default.aspx:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <%:commonXSS %>
    <input type="text" value="Default" />
    </div>
    </form>
</body>
</html>

以上代码中,假设用户输入:UserInputData=“”;,由于代码层面无任何过滤或防护措施,UserInputData参数值在页面中输出,导致反射型XSS。


二、缺陷代码示例(存储型XSS)

Java

while(rs.next()){
%>
<tr>
<td><%=rs.getInt("id") %></td>
<td><%=rs.getString("pname")%></td>
<td><%=rs.getString("pdesc")%></td>
<td><%=rs.getString("ptype")%></td>
</tr>
<%
}

代码中均为从数据库中读取到的数据,该数据被直接输出到了页面中,没有做任何安全过滤,若从数据库中获取到的数据中包含JS/VBS脚本,就可能导致用户浏览器把JS/VBS脚本执行,从而造成XSS攻击。

04 漏洞案例


在这里插入图片描述

某某平台存在XSS漏洞,用户提交的数据,直接被输出到客户端页面,且存储在服务端数据库中,为存储型XSS。

在这里插入图片描述)
在这里插入图片描述
搭建环境,验证存储型XSS漏洞真实存在,如下图所示:

在这里插入图片描述

05 修复方案

对用户提交的数据在输出返回浏览器前进行转义,对特殊字符如;尖括号,括号,单引号,双引号,反斜线等进行HTML字符实体转义。

总体修复方式:验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。具体如下 :

(1)输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。

(2)输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。

(3)明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO 8859-1或 UTF 8)。

(4)注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如"<" ">"或类似"script"的关键字),很容易被XSS变种攻击绕过验证机制。

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

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

相关文章

没网络的CentOS7的Docker容器安装Java诊断神器Arthas

操作过程 1. 先把jar包下载到本地的windwos2. 打包复制到服务器3. 启动容器设置4.重启容器并使用Arthas 1. 先把jar包下载到本地的windwos 下载地址 下载好后jar&#xff0c;然后CMD执行命令 java -jar arthas-boot.jar 然后随便进入某个jvm进程查看&#xff0c;会见到Conso…

【技术新趋势】面向图像文档的版面智能分析与理解

目录 一、什么是OCR&#xff1f;什么是版面分析理解&#xff1f;二、文档版面分析2.1、版面布局类型2.2、面向文档图像版面分析的实例分割2.3、逻辑结构分析 三、文档版面理解3.1、位置嵌入3.2、表格数据提取 四、智能文档处理技术新解决方案 人类撰写文档是为了记录和保存信息…

Zoho Books助力跨境贸易!深入了解其多币种处理功能

对于跨境行业而言&#xff0c;合作不同的客户以当地货币收取付款是一个不简单的任务。现在&#xff0c;Zoho Books 推出了新的高级多币种处理功能&#xff0c;让多货币付款或收款不再困扰。&#xff08;注意&#xff1a;此功能在Zoho Books的专业版&#xff0c;高级版&#xff…

使用 ChatGPT 创建 APP 的最佳实践

导读&#xff1a;如果你想用用ChatGPT创建应用程序来赚钱&#xff0c;这是你需要知道的。 本文字数&#xff1a;2900&#xff0c;阅读时长大约&#xff1a;18分钟 如果你想用ChatGPT创建应用程序来赚钱&#xff0c;这是你需要知道的。 我最好先说出坏消息。如果你认为可以两手…

【后端开发】尚硅谷 SpringCloud 学习笔记

文章目录 一、cloud组件二、环境搭建2.1 创建父工程2.2 支付模块构建2.3 消费者模块构建2.3.1 引入RestTemplate2.3.2 远程调用支付模块 三、Eureka3.1 基础知识3.2 单机版Eureka安装3.3 服务注册3.4 Eureka集群3.4.1 Eureka端配置3.4.2 微服务端配置3.4.3 restTemplate负载均衡…

如何让ChatGPT制作XMind思维导图

一、使用ChatGPT辅助生成内容 给大家一个思路&#xff0c;比如我想制作《股神巴菲特给儿女的一生忠告》相关的思维导图&#xff0c;那我们可以在ChatGPT上提问“请使用markdown格式写出股神巴菲特给儿女的一生忠告的思维导图&#xff0c;以代码格式输出”。 生成后&#xff0…

teleport堡垒机的一些问题

teleport文件下载&#xff0c;将teleport服务映射到公网&#xff0c;权限已经分派好了&#xff0c;但无法ssh&#xff0c;这是什么原因呢&#xff1f; 注意teleport助手的版本要跟部署的是一致的&#xff0c;否则会检测不到状态 出现下面的问题&#xff0c;应该还是在防火墙的端…

奇舞周刊第496期:ChatGPT 的工作原理,这篇文章说清楚了!

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ ChatGPT 的工作原理&#xff0c;这篇文章说清楚了&#xff01; ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西&#xff0c;这非常了不起&#xff0c;而且出乎意料。…

DM3E,雷赛步进驱动器

0x6040&#xff1a; 0x6041&#xff1a; 状态流&#xff1a; 0x60608; //设置伺服模式 8CSP&#xff0c;6回零模式&#xff0c;3速度模式6040流&#xff1a; 00初始》06上电》07使能》0F待命&#xff08;可操作&#xff09; 快停流&#xff1a; 02快停》0F命令生效 参数保…

Vue全家桶(三):Vuex状态管理(State、Getters、Mutations、Actions)

目录 Vuex1. 理解Vuex1.1 组件之间共享数据的方式1.2 Vuex是什么1.2 什么时候使用Vuex1.3 Vuex的工作原理图 2 使用Vuex2.1 搭建Vuex环境 2.2 Vuex基本使用2.2.1 State2.2.2 Getters2.2.3 Mutations2.2.4 Actions2.2.5 Modules 模块化命名空间 3 求和案例3.1 使用纯vue编写3.2 …

Property ‘code‘ does not exist on type ‘AxiosResponse<any, any>‘ 的解决办法

原文链接 : Property ‘xxx’ does not exist on type ‘AxiosResponse<any, any>’ 的解决办法 vue3 ts 中 调用接口时&#xff1a; const loginOut () > {loginOutApi().then(res > {const { code } resif(code 0){ }})}报了如下错误&#xff1a; Property…

Python基础(3)——PyCharm介绍

Python基础&#xff08;3&#xff09;——PyCharm介绍 文章目录 Python基础&#xff08;3&#xff09;——PyCharm介绍课程目标一. PyCharm的作用二. 下载和安装2.1 下载2.2 安装 三. PyCharm基本使用3.1 新建项目3.2 新建文件并书写代码3.3 运行文件 四. PyCharm的基本设置4.1…

基于Hexo和Butterfly创建个人技术博客,(10) 使用Butterfly的Tags Plugin插件增强博客文章内容和视觉表现力

Butterfly官方网站&#xff0c;请 点击进入 说明&#xff1a; 前面已经提过Hexo自创了Tag Plugin内容标签&#xff0c;Butterflay主题在此基础上又扩展了一些。本文就详细讲解下这些标签带来哪些额外的功能和UI方面的强化&#xff1b; 本章目标&#xff1a; 掌握butterfly扩展…

LightningChart .NET 10.5.1 Crack LightningChart 2023

LightningChart .NET v.10.5.1 已经发布&#xff01; DataCursor 和 3D TransparencyRenderMode 现在可用。 为所有 3D、Polar 和 Smith 系列启用 DataCursor 在早期阶段&#xff0c;LightningChart 提供了不同的工具&#xff0c;需要用户编写额外的代码才能启用数据跟踪功能。…

phpstudy免费下载

phpstudy免费下载 phpstudy是一个可以在本地建站的php环境软件链接: https://pan.baidu.com/s/1vfi-gy3juYBUjGz_Cq2gHg 提取码: 1234链接: http://120.26.240.154:8888/down/5Sx9yB0s0HS3.zip phpstudy是一个可以在本地建站的php环境软件 百度网盘分享 链接: https://pan.ba…

Session和Cookie,你真的弄清了吗?

Session和Cookie Session和Cookie Session和Cookiecookiecookie的生命周期cookie作用域 Sessionsession的生命周期session作用域 cookie和session安全性 为什么需要cookie和session&#xff1f;在web系统发展变迁时&#xff0c;web发展时随着需求的不断增多&#xff0c;交互的存…

Ceph:关于Ceph 集群中池管理的一些笔记

写在前面 准备考试&#xff0c;整理 Ceph 相关笔记博文内容涉及, Ceph 中的 两种 pool 介绍&#xff0c;创建操作管理池理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停…

java公益网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目wap

一、源码特点 java 公益网站系统是一套完善的java web wap信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Ceph:关于Ceph 集群管理的一些笔记

写在前面 准备考试&#xff0c;整理ceph 相关笔记博文内容涉及&#xff0c;Ceph 管理工具 cephadm&#xff0c;ceph 编排器&#xff0c;Ceph CLI 和 Dashboard GUI 介绍理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守…

Android插件化框架-Shadow原理解析

作者&#xff1a;dennyz 1、前言 所谓插件化&#xff0c;是实现动态化的一种具体的技术手段。 对于移动端的App而言&#xff0c;无论是Android还是iOS&#xff0c;都存在一个共同的问题&#xff0c;那就是更新的周期较长。 当我们希望快速为App更新功能时&#xff0c;必须经…