XSS(Cross Site Scripting)攻击简介

news/2023/6/7 0:20:19

环境

  • Ubuntu 22.04
  • IntelliJ IDEA 2022.1.3
  • JDK 17.0.3.1
  • Spring Boot 3.0.1
  • Firefox 108.0.2

问题和分析

在IntelliJ IDEA中创建Spring Boot项目 test0116 ,并选中 Spring Web 依赖。

src/main/java 下创建 MyController.java 如下:

package com.example.test0116.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@RequestMapping("/test")public String test(String data) {String result = "<h1>The input data is:</h1>" + data;return result;}
}

运行程序,测试一下效果:

➜  ~ curl --silent "http://localhost:8080/test?data=abcdefg"                            
<h1>The input data is:</h1>abcdefg
➜  ~ 

同理,用浏览器来测试一下:

在这里插入图片描述

看起来没有什么问题。API请求包含了 data=xxxxx 的参数,服务器返回的response里也包含了该参数值。

但是,如果 xxxxx 是一段script或者HTML元素的文本,那么实际在页面上显示时,并不是只显示 xxxxx 的文本,而是会把 xxxxx 当作script或者HTML来解析。

例如,令 xxxxx<button onclick="alert('haha')">click me</button> ,如下:

在这里插入图片描述

点击按钮,如下:

在这里插入图片描述

可见,这个API有潜在的风险。比如黑客可以把这个链接发给别人,同时把 xxxxx 替换为一段恶意代码,则其他人如果打开该链接,就会遭受恶意攻击。

比如,黑客给别人的链接里,令 xxxxx<a href="http://bad_link">hello</a> ,则别人打开该链接,页面上就会出现一个恶意网站的链接:

在这里插入图片描述

若点击页面上的链接,就会遭受恶意网站攻击。

同理,网站的页面也可能会被攻击。比如,在 src/main/resources/static 目录下创建HTML文件 test.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body>
<input id="input1"></input><button id="btn1">btn1</button><div id="div1"></div><script>const btn1 = document.getElementById('btn1');btn1.onclick = function () {const xhr = new XMLHttpRequest();const input = document.getElementById('input1').value;xhr.open('GET', "http://localhost:8080/test?data=" + input);xhr.send();xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {const data = xhr.responseText;const div1 = document.getElementById("div1");div1.innerHTML = data;}}}
</script>
</body></html>

打开浏览器,访问 http://localhost:8080/test.html ,如下:

在这里插入图片描述

在输入框中输入一些文本,然后点击 btn1 按钮,如下:

在这里插入图片描述

看起来没有问题,但是,类似的,也可以在输入框中输入恶意代码(当然,本例中攻击的是自己的浏览器,这只是一个示例):

在这里插入图片描述
可见,页面上出现了一个恶意链接。

这种攻击手段称为“Cross Site Scripting”,简称“XSS”。

常见的XSS攻击有:

  • 存储型:持久化在服务器中,例如评论功能,发表的评论会存储在服务器,评论本来应该是纯文本,但如果包含了恶意代码,将来就有可能运行并造成攻击。比如在评论中包含JavaScript代码,这样别人在获取评论时,就可能遭受攻击;
  • 反射型:刚才的例子就是反射型,利用用户恶意输入的请求内容,在响应里包含恶意代码;
  • DOM型:不经过服务器,比如发送请求时,本地的脚本会先解析请求的参数,脚本只把参数值看作纯文本,而实际上参数值可能包含了恶意代码,如果脚本处理不当,就有可能造成攻击;

其它

之所以研究这个话题,是因为在代码里,后端代码里会对API请求做参数验证,如果参数值不符合要求,会返回error,以及一个message,大意是“输入参数有误,请检查并更改。参数值:xxxxxx”。也就是说,会把用户不符合条件的参数原封不动的返回给用户。这就跟本文中的例子有点类似,有遭受恶意代码攻击的风险。

如何解决

在网上搜“XSS”,有很多讨论和解决办法,有待深入研究。

如果是像本文中的例子,API返回的是字符串,而且response里既包含HTML或脚本,又包含纯文本,那么很难控制,这应该算是程序设计上的缺陷,因为在服务器端的字符串里,已经把代码和纯文本混在一起,没法区分了。

一个变通的办法是把数据编码,也就是利用转义,强制令其为纯文本,这就不会有代码注入的风险。但是这样一来,前端得到的数据就变了,需要再对其解码,恢复为原先的文本。比如参数验证,明明用户的参数A有误,服务器却告诉用户参数B不正确,这貌似不太合理,不是完美的解决办法。

如果仅返回数据,那么编码/解码应该是OK的。

其实如果返回的是纯文本,比如字符串或者JSON数据,那么只要前端正确的处理,严格把返回数据当作文本,不给其运行的机会,应该也还好吧。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【非主键(index制约)项目登录一意制约问题】

TOC 非主键项目登录一意制约 最近在客户端登陆数据的时候发现一个主键不冲突但是登录的时候还是发生了一意制约的问题。 首先看一下表结构 主键有【year_id】&#xff0c;【person_id】这两个字段 用DBMS登录两条数据测试 INSERT INTO nkm_mask.t_thu_persion( year_id…

制约大数据发展的核心因素是什么?

本文尝试从大数据产业链的各环节入手&#xff0c;谈谈当前制约其发展主要因素。 众所周知&#xff0c;大数据按照处理流程可以分为三步&#xff1a; 大数据采集和清洗大数据存储和分析大数据展现和应用从以上这三个方面&#xff0c;我想谈谈制约大数据发展的几个核心问题。 一、…

并发程序的制约

背景&#xff1a;在敲学生信息管理系统的时候出现了这么几个关键字&#xff0c;keyset ,optimistic ,这是什么意思呢&#xff1f;对此稍作总结了一下

约束极值问题---制约函数法

2019独角兽企业重金招聘Python工程师标准>>> 外点法 内点法 转载于:https://my.oschina.net/liyangke/blog/2985945

我国大型数据中心占比已达12.7%,大而不强成制约因素

当下的国民经济对于数字化的依赖日益加深&#xff0c;据中国信息通信研究院数据显示&#xff0c;我国数字经济增加值规模由2005年的2.6万亿元增加至2019年的35.8万亿元。与此同时&#xff0c;数字经济在GDP所占的比重逐年提升&#xff0c;由2005年的14.2%提升至2019年的36.2%。…

第三讲:研发项目管理目标的平衡与制约

研发项目管理目标的平衡与制约 版本: v1.0.0 作者: Catherine 时间: 2019.03.18 目录 1.项目目标的平衡制约示意图2.何为关键目标3.Q/C失去弹性的条件下&#xff0c;压缩项目进度的常用方法4.Q/T失去弹性的条件下&#xff0c;降低项目成本的常用方法5.C/T失去弹性的条件下&…

计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习

1. 问题描述 设自行车生产线上有一只箱子&#xff0c;其中有N个位置&#xff08;N≥3&#xff09;&#xff0c;每个位置可存放一个车架或一个车轮&#xff0c;又设有三名工人&#xff0c;其活动分别为&#xff1a; 2. 问题分析&#xff08;包括涉及的知识点、制约关系分析、问…

考研二战日记-第30天——操作系统:进程间的制约关系

两种相互作用 同步 多个相关进程在执行次序上的协调。 制约关系&#xff1a;直接制约。 如图所示&#xff1a;一个进程在执行操作的时候&#xff0c;另一个进程必须等待&#xff0c;体现在次序上的等待和协调&#xff0c;并不争夺临界资源。 互斥 多个进程因为争夺临界资源…