XSS基础了解和解决方案

2024-09-04 03:38
文章标签 基础 解决方案 了解 xss

本文主要是介绍XSS基础了解和解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要内容


  • 什么是XSS?
  • XSS的危害有哪些?
  • 常见的XSS漏洞
  • 如何防范XSS?

什么是XSS?


跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。

XSS的危害有哪些?


  • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;
  • 盗窃企业重要的具有商业价值的资料;
  • 非法转账;
  • 强制发送电子邮件;
  • 网站挂马;
  • 控制受害者机器向其它网站发起攻击。
  • ...

常见的XSS漏洞


  • 反射型XSS
  • 存储型XSS
  • DOM XSS
  • 突变XSS

反射型XSS


又叫非持久型XSS,当不可信的用户输入被服务器在没有任何验证下处理并在没有编码或转义的情况下反射回响应文中,导致代码在浏览器执行的一种 XSS 漏洞。


例子代码
正常效果 
XSS效果

xss攻击参数:";alert('xss');//产生原因:服务端未对参数就行编码或者转义导致
采用任何一种php提供的方法进行编码都可以过滤XSS
$name = htmlspecialchars($_GET['name']);

存储型XSS

又叫持久型XSS是当不可信的用户输入被处理并在没有任何验证的情况下保存在文件或数据库,同时该不可信的数据从存储中被获取然后在没有编码或转义的情况下反射回响应文中,导致了永久性的每次存储数据反射回响应文代码就会在浏览器中执行的一种XSS漏洞。

DOM XSS


数据来源在 DOM 中,接收器也在 DOM 中,而数据流从来没有离开浏览器。它发生在一个不可信的数据在源中被给予并被执行,结果导致修改了 DOM 在浏览器中的“环境”。DOM XSS 攻击发生在不可信数据相对于上下文没有被编码或转义的情况下。

dom xss代码
效果地址

普通图片地址:http://p1.qhimg.com/t010c1d27667bbe0417.png

XSS地址:http://p1.qhimg.com/t010c1d27667bbe0417.png" onload="javascript:alert(document.cookie);

突变XSS


mXSS 或突变 XSS 是当不可信数据在 DOM 的 innerHTML 属性的上下文被处理并通过浏览器发生突变,导致变成一种有效的 XSS 向量的一种 XSS 漏洞。在 mXSS,一个看起来无害的可以通过客户端或服务端XSS过滤器的用户指定的数据通过浏览器执行引擎发生突变可以反射回一个有效的 XSS 向量。XSS 过滤器不能防止 mXSS。为了防止 mXSS,应实施有效的 CSP,框架应该不被允许,HTML 文档应该定义文档类型,强制浏览器遵循标准呈现内容以及执行脚本。

很难理解!!!


简单的说


正常输入没有问题,在浏览器再次解析的时候出现了问题。

还是挺绕的~~~


看看这里吧

扩展


  • UXSS:是通过浏览器或者浏览器扩展的漏洞来"制作XSS漏洞"
  • CSRF:跨站请求伪造

参考

如何进行防范呢?


  • 验证输入并且基于语境和按照正确的顺序转义不可信数据 
    浏览器的解析顺序:html->css->js 
    浏览器的解码顺序:html->url->js

  • 始终遵循白名单优于黑名单的做法 
    因为黑名单的集合是无限的,我们不能考虑到各种情况

  • 使用 UTF-8 为默认的字符编码以及设置 content 为 text/html 

  • 不要将用户可以控制的文本放在标签前。通过使用不同的字符集注射可以导致 XSS。
  • 使用推荐的 HTTP 响应头进行 XSS 防护


 

HTTP响应头描述
X-XSS-Protection: 1; mode=block该响应头会开启浏览器的防XSS 过滤器。
X-Frame-Options: deny该响应头会禁止页面被加载到框架。
X-Content-Type-Options: nosniff该响应头会阻止浏览器做MIMEtype
Content-Security-Policy: default-src 'self'该响应头是防止 XSS 最有效的解决方案之一。它允许我们定义从 URLS 或内容中加载和执行对象的策略
Set-Cookie: key=value; HttpOnlySet-Cookie 响应头通过HttpOnly 标签的设置将限制JavaScript 访问你的 Cookie。
Content-Type: type/subtype;charset=utf-8始终设置响应的内容类型和字符集
  • 防止 CRLF 注入/HTTP 响应拆分 
    参考地址

终极方案


  • 编码 
  • 转义
  • 规范书写
  • 预防更改http请求头
  • XSS监控以及上报

这篇关于XSS基础了解和解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134893

相关文章

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.