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

跨站脚本攻击

    • 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.rhkb.cn/news/211485.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

一、创建新项目 首先创建一个新的项目&#xff0c;并命名。 二、实现代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class liaotian extends JFrame{ pri…

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位&#xff0c;很多本来在场外观望的投资者&#xff0c;都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与&#xff0c;如果大家还没做好技术上的准备&#xff0c;可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

LLM大语言模型(一):ChatGLM3-6B本地部署

目录 前言 本机环境 ChatGLM3代码库下载 模型文件下载 修改为从本地模型文件启动 启动模型网页版对话demo 超参数设置 GPU资源使用情况 &#xff08;网页对话非常流畅&#xff09; 前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的…

【MATLAB】SSA+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 SSAFFTHHT组合算法是一种基于奇异谱分析&#xff08;SSA&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;HHT&#xff09;的组合算法。 其中&am…

搭梯子之后电脑连接WIFI打不开浏览器网页:远程计算机或者设备不接受连接

问题描述&#xff1a; 打不开网页&#xff0c;但是能正常使用微信等app windows网络诊断&#xff1a; 远程计算机或者设备不接受连接 解决办法&#xff1a; 电脑搜索【internet选项】 进入连接&#xff0c;点击局域网设置&#xff0c;将里面的代理服务器选项关掉就可以正常打开…

西南科技大学模拟电子技术实验五(集成运算放大器的应用设计)预习报告

一、计算/设计过程 设计一:用集成运放设计一个输入为0.05v,放大为-100的反相比例运算电路。 对于理想电路,反相比例运算电路的输出电压与输入电压之间的关系如下: =-100,所以 =100 若是假定R1为100k,则R2= =1k 为了减小输入级偏置电流引起的运算误差,在同相输入端…

103.进程概述

目录 1.并行和并发 区别&#xff1a; 2.PCB 3.进程状态 4. 进程命令 从严格意义上来讲&#xff0c;程序和进程是两个不同的概念&#xff0c;他们的状态&#xff0c;占用的系统资源都是不同的。 程序&#xff1a;程序是一种静态实体&#xff0c;是存储在计算机存储介质上的…

Android Glide自定义AppCompatImageView切分成若干小格子,每个小格子onDraw绘制Bitmap,Kotlin(1)

Android Glide自定义AppCompatImageView切分成若干小格子&#xff0c;每个小格子onDraw绘制Bitmap&#xff0c;Kotlin&#xff08;1&#xff09; 垂直方向的RecyclerView&#xff0c;每行一个AppCompatImageView&#xff0c;每个AppCompatImageView被均匀切割成n个小格子&#…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所&#xff0c;所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外&#xff0c;还需要能源管理消耗监测平台&#xff0c;帮助企业实现节能减排的目标。 工厂能源消费量非常庞大&#xff0c;能源比较难以监测与控制。传统能源的管…

P6 Linux 系统中的文件类型

目录 前言 ​编辑 01 linux系统查看文件类型 02 普通文件 - 03 目录文件 d 04 字符设备文件 c 和块设备文件 b 05 符号链接文件 l 06 管道文件 p 07 套接字文件 s 总结 前言 &#x1f3ac; 个人…

Python+requests+unittest执行接口自动化测试详情

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest 2、创建六类Python Package 利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)…

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…

【3DsMax】制作简单的骨骼动画

效果 步骤 首先准备4个板子模型展开放置好 添加一个4段的骨骼 选中其中的一块板子添加蒙皮命令 在蒙皮的参数面板中&#xff0c;设置每块板子对应哪块骨骼 设置好后你可以发现此时就已经可以通过骨骼来控制模型了 接下来就可以制作动画 点击左下角“时间配置”按钮 设置一下动…

网络程序设计

互相连接&#xff0c;发送信息 tcp和udp协议 tcp会有准备&#xff0c;udp不会准备。 8080端口&#xff1a;tomcat端口&#xff0c;java和web相连接 80端口&#xff1a;http 21端口&#xff1a;ftp 套接字 socket&#xff1a;提供给程序可以对外进行连接的接口 ip地址 …

Elk:filebeat 日志收集工具和logstash

Filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 Filebeat可以在非java环境使用&#xff0c;他可以代理logstash在非java环境上收集日志 缺点Filebeat无法实现数据的过滤,一般是结合logstash的 实验 ELK 企业级日志分析系统---…

Java第二十一章网络通信

一、网络程序设计基础 1、局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机&#xff0c;如下图所示。 2、网络协议 1.IP协议 IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。设计IP的目的…

C++ 拷贝构造函数

目录 拷贝构造函数概述 拷贝构造函数特性 拷贝构造函数概述 当我们定义好一个类&#xff0c;不做任何处理时&#xff0c;编译器会自动生成以下6个默认成员函数&#xff1a; 默认成员函数&#xff1a;如果用户没有手动实现&#xff0c;则编译器会自动生成的成员函数。 同样&…

Centos图形化界面封装OpenStack Ubuntu镜像

目录 背景 环境 搭建kvm环境 安装ubuntu虚机 虚机设置 系统安装 登录虚机 安装cloud-init 安装cloud-utils-growpart 关闭实例 删除细节信息 删除网卡细节 使虚机脱离libvirt纳管 结束与验证 压缩与转移 验证是否能够正常运行 背景 一般的镜像文件在上传OpenSt…

DBSCAN聚类算法学习笔记

DBSCAN聚类算法学习笔记 一些概念名词 MinPts&#xff1a;聚类在一起的点的最小数目&#xff0c;超过这一阈值才算是一个族群 核心点&#xff1a;邻域内数据点超过MinPts的点 边界点&#xff1a;落在核心点邻域内的点称为边界点 噪声点&#xff1a;既不是核心点也不是边界点的…