网络安全威胁——跨站脚本攻击

news2025/1/23 15:12:08

跨站脚本攻击

    • 1. 定义
    • 2. 跨站脚本攻击如何工作
    • 3. 跨站脚本攻击类型
    • 4. 如何防止跨站脚本攻击

1. 定义

跨站脚本攻击(Cross-site Scripting,通常称为XSS),是一种典型的Web程序漏洞利用攻击,在线论坛、博客、留言板等共享平台是跨站脚本攻击的典型目标。

攻击者利用Web程序对用户输入检查不足的漏洞将可执行恶意脚本注入网站或Web应用,当用户访问网页时触发恶意脚本的执行,从而达到窃取用户个人数据、弹出广告,甚至篡改网页内容等攻击目的。

与其他Web攻击类型不同,跨站脚本攻击是一种客户端代码注入攻击,恶意脚本在前端浏览器或Web应用程序等客户端侧执行,而非在后端服务器或数据库执行,最终受害者是访问用户

2. 跨站脚本攻击如何工作

跨站脚本攻击的基本原理是攻击者操纵存在漏洞的网站,向用户返回恶意脚本达成攻击目的,主要过程如下:

在这里插入图片描述

  • 攻击者发现存在漏洞的网站,然后利用漏洞在网页中注入恶意脚本。

凡是对用户输入限制不够严格的网站都可能发生脚本注入。恶意脚本通常是JavaScript ,当然也可以是Java、VBScript、ActiveX、Flash等。

  • 当用户访问网站时,恶意脚本被加载到浏览器中并触发执行。

触发恶意脚本执行的方法有很多种,例如,引诱用户点击链接,或当网页加载或用户鼠标停留在网页的特定元素上时自动触发脚本执行。

  • 恶意脚本访问浏览器留存的Cookie、会话令牌以及其他敏感信息,甚至可以改写页面内容,从而达成攻击目的。

攻击者通过窃取的用户Cookie就可以冒充用户,执行用户能够执行的操作,窃取用户身份信息、泄露用户文件等。另外攻击者还可以利用跨站脚本传播恶意软件、破坏网页内容、进行网络钓鱼等,实施更具破坏性的攻击。

3. 跨站脚本攻击类型

(1)反射型跨站脚本攻击

反射型跨站脚本攻击是最常见和最简单的攻击形式。所谓反射,是指此种类型的注入脚本必须被包含在发往Web服务器的请求中,然后Web服务器以某种方式反射到用户浏览器执行。也就是注入脚本作为客户端的请求提交给Web服务器,服务器解析后在响应消息中返回脚本由浏览器执行。因此攻击者需要使用钓鱼邮件、弹窗链接以及其他社会工程学方法引诱用户点击链接向Web服务器发出请求。

攻击者往往在合法的URL末尾添加恶意代码构造链接,例如:

https://example.com/index.php?user=<script>恶意代码</script>

用户点击此链接后,因为浏览器信任该网站,将执行恶意脚本代码。

从以上介绍可以看出,这种攻击类型Web服务器端无需存储注入脚本,直接通过HTTP GET或POST请求就可以完成攻击,实施比较简单。但是这种攻击方式需要由每个受害者触发才能发生攻击,往往也称为非持久型跨站脚本攻击。

(2)存储型跨站脚本攻击

存储型跨站脚本攻击也称为持久型跨站脚本攻击,是一种最具破坏性的跨站脚本攻击。注入的脚本永久存储在Web服务器上,如数据库、内存或文件系统中。只要注入脚本代码没有被清理,每次用户访问网页时都将加载恶意脚本。

存储型跨站脚本攻击一般发生在论坛、博客、留言板等允许用户共享内容的网站,如果网站存在漏洞,未严格校验用户输入内容就可能被攻击者利用。攻击者利用发帖、评论、修改个人信息等功能提交恶意脚本代码到Web服务器进行保存,那么只要访问对应网页的用户都会在不知情的情况下读取恶意脚本。

相对于反射型跨站脚本攻击,存储型跨站脚本攻击影响范围更大,危及所有访问者。当然这种攻击方式也更难执行,攻击者需要找到可以利用的漏洞。

(3)基于DOM的跨站脚本攻击

基于DOM(Document Object Model,文档对象模型)的跨站脚本攻击是一种更高级的攻击形式,通过篡改DOM注入恶意脚本。DOM提供对文档结构化的描述,并将HTML页面与脚本、程序语言联系起来,当网页被加载时,浏览器会创建页面的文档对象模型DOM。Web程序的客户端侧JavaScript脚本可以对DOM进行编辑从而动态修改网页内容,也就是从DOM获取数据然后在用户本地执行。在这个过程中,如果数据处理不当,攻击者就可以将恶意脚本注入DOM,然后读取DOM数据时触发攻击。经常被利用的DOM对象包括URL (document.URL)、URL 锚点部分 (location.hash) 和 Referrer (document.referrer)。

基于DOM的跨站脚本攻击与反射型、存储型跨站脚本攻击有很大不同,整个攻击过程均在用户侧浏览器执行,无需Web服务器端进行解析和响应访问请求。这种类型的攻击比较难排查,WAF设备无法获取通信流量,可能难以发现攻击。

4. 如何防止跨站脚本攻击

从Web程序开发角度,需要遵循安全开发原则,采取措施防止跨站脚本攻击:

  • 对用户输入进行验证和过滤,验证输入是否符合预期格式,过滤掉一些特殊字符和标签(例如<script>)避免注入恶意脚本。
  • 对用户输入进行转义,也就是将用户输入呈现给用户之前确保对其进行转义,例如将“>”转义为“&gt”,这样可以防止接收到的输入中的一些字符被解释为可执行代码,使恶意脚本失效。
  • 对Cookie采取安全措施,例如设置HttpOnly Cookie属性防止JavaScript读取Cookie,避免用户身份验证令牌和敏感信息被窃取。
  • 使用HTTP的响应头CSP(Concent Security Policy,内容安全策略)限制哪些资源可以被加载和执行,例如限制JavaScript的来源,从而防止恶意脚本注入。
  • Web程序开发需要遵循OWASP的Cross Site Scripting Prevention Cheat Sheet(跨站脚本攻击预防备忘录),继承已有经验。
  • 对Web程序进行渗透测试,加固跨站脚本漏洞。

从访问网站的用户角度,需要有风险意识,避免遭受跨站脚本攻击:

  • 在浏览器中设置禁用脚本。
  • 避免点击电子邮件、论坛中的不明链接。
  • 及时更新软件及操作系统补丁。
  • 安装杀毒软件。

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

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

相关文章

Leetcode刷题笔记题解(C++):92. 反转链表 II

思路&#xff1a;获取要反转的区间&#xff0c;拆开之后进行反转再拼接 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

《当代家庭教育》期刊论文投稿发表简介

《当代家庭教育》杂志是家庭的参谋和助手&#xff0c;社会的桥梁和纽带&#xff0c;人生的伴侣和知音&#xff0c;事业的良师益友。 国家新闻出版总署批准的正规省级教育类G4期刊&#xff0c;知网、维普期刊网收录。安排基础教育相关稿件&#xff0c;适用于评职称时的论文发表…

Java利用TCP实现简单的双人聊天

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为聊天。然后创建包&#xff0c;创建两个类&#xff0c;客户端&#xff08;SocketClient&#xff09;和服务器端&#xff08;SocketServer&#xff09; 二、实现代码 客户端代码&#xff1a; package 聊天; import ja…

算法训练 第十周

一、图书整理 II 1.两个栈 将一个栈当作输入栈&#xff0c;用于压入 appendTail 传入的数据&#xff1b;另一个栈当作输出栈&#xff0c;用于 deleteHead操作。每次 deleteHead 时&#xff0c;若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈&#xff0c;这样输出栈从栈…

五大编程实用工具推荐,全都是干货!持续更新...

编程实用工具推荐 1. Sublime Text 官网&#xff1a;https://www.sublimetext.com/ Sublime Text 是一款流行的跨平台文本编辑器。 它受到广大开发者和程序员的欢迎&#xff0c;具有轻量级、高度可定制和强大的功能。 以下是 Sublime Text 的一些主要特点&#xff1a; 1. 多平台…

Linux:dockerfile编写搭建nginx练习(8)

dockerfile是创建镜像的一种&#xff0c;通过已有镜像的基础上再在上面部署一些别的。 在这个基础镜像上搭建&#xff0c;我这个是一个空的centos镜像 我这里用http的yum仓库存放了nginx和rpm包 创建dockerfile vim Dockerfile写入#设置基础镜像 FROM centos#维护该镜像的用户…

虚拟机配置网络(这里以centos为例)

①、点击“编辑”里面的“虚拟网络编辑器”,取消勾选DHCP服务将IP地址分配给虚拟机。 2.点击nat设置&#xff0c;看看对应的子网ip和网关地址还有子网掩码&#xff0c;然后在安装虚拟机生成的vmware8适配器配置中配置和刚刚nat配置中一样的配置 3&#xff0c;然后和第二部一样…

Linux下Python调用C语言

一&#xff1a;Python调用C语言场景 1&#xff0c;已经写好的C语言代码&#xff0c;不容易用Python实现&#xff0c;想直接通过Python调用写好的C语言代码 2&#xff0c;C比Python快&#xff08;只是从语言层面&#xff0c;不能绝对说C程序就是比Python快&#xff09; 3&…

win10下装ubuntu双系统(免U盘)

系统环境&#xff1a; win10系统&#xff0c;工具&#xff0c; 1.EasyBCD&#xff0c;建议2.2以上版本 2.Ubuntu 18.04 系统。当然你也可以下载别的版本&#xff0c;这个不重要。Ubuntu官网下载地址 步骤&#xff1a; 1.桌面右键我的电脑&#xff0c;点击管理->磁盘管理 …

HashMap系列-放入元素的流程

1.put public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {//通过key生成hash后&#xff0c;调用putVal方法public V put(K key, V value) {return putVal(hash(key), key, value, false, true);} } 2.put…

第二十一章 网络通信

网络通信这一章 基本分为三个部分 网络基础概念和TCP,UDP这三个部分主要如下&#xff1a; 计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#x…

代码随想Day24 | 回溯法模板、77. 组合

理论基础 回溯法和递归不可分割&#xff0c;回溯法是一种穷举的方法&#xff0c;通常需要剪枝来降低复杂度。回溯法有一个选择并退回的过程&#xff0c;可以抽象为树结构&#xff0c;回溯法的模板如下&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}…

【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目

从0配置JAVA项目相关环境 写在最前面一、安装Java的jdk环境1. 下载jdk2. 配置jdk3. 配置环境变量 二、在vscode中配置java运行环境1. 下载VSCode2. 下载并运行「Java Extension Pack」 三、安装mysql1.官网下载MySQL2.开始安装如果没有跳过安装成功 3.配置MySQL Server4.环境变…

InST论文复现

论文地址&#xff1a;https://arxiv.org/abs/2211.13203 论文git&#xff1a;https://github.com/zyxElsa/InST 遇到的问题&#xff1a; 1.requests.exceptions.SSLError: HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /openai/clip-…

机器学习 | RMSE和R平方误差的数学解释

RMSE&#xff1a;均方根误差是回归线拟合数据点的程度的度量。RMSE也可以解释为残差中的标准差。 考虑给定的数据点&#xff1a;&#xff08;1&#xff0c;1&#xff09;&#xff0c;&#xff08;2&#xff0c;2&#xff09;&#xff0c;&#xff08;2&#xff0c;3&#xff09…

java WebSocket带参数处理使用

1、webSocket实现代码 Component public class WebSocketStompConfig {//这个bean的注册,用于扫描带有ServerEndpoint的注解成为websocket// ,如果你使用外置的tomcat就不需要该配置文件Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpoi…

三十八、AT模式

目录 一、定义 1、AT模式工作原理如下&#xff1a; 2、优点&#xff1a; 3、缺点&#xff1a; 4、流程&#xff1a; 二、AT模式与XA模式的区别 三、AT模式的脏写问题 四、实现AT模式 一、定义 AT模式是指使用AT命令进行串口通信的工作模式。AT命令是由两个字符组成的命…

协同过滤算法之vue+springboot个性化电影评分推荐系统6n498

摘要为了解决信息过载问题,个性化推荐系统由此产生。个性化推荐系统通过对用户行为的分析,利用数据挖掘算法对信息进行过滤,将用户可能感兴趣的产品或项目推荐给用户。对于电影爱好者来说,利用网络在浩如烟海的电影数据库中找到自己喜欢的电影并非易事。电影作为一个艺术的载体…

ahk系列-windows超级运行框-表达式计算(6)—asc/ord/chr ASCII 码转换

1、环境准备 windows 7&#xff0c;8&#xff0c;10&#xff0c;11操作系统ahk 2.x_64位 2、使用方式 asc 可以计算 asc字符 &#xff0c;或者汉字&#xff0c;的数值&#xff0c;ord /chr 则是把数值转换为字符 当然有很多字符不可见&#xff0c;比如我们用 “{}” 包裹它…

软件测试之python+requests接口自动化测试框架实例教程

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…