XSS攻击

简介: XSS(跨站脚本攻击)利用网站对用户输入过滤不足,将恶意脚本注入页面,用户访问时执行,可窃取Cookie、数据或劫持操作。主要分反射型(通过URL注入)和存储型(存入数据库)。防御措施包括转义字符、白名单过滤富文本及使用CSP策略限制资源加载,有效降低安全风险。(238字)
  1. 介绍一下XSS攻击的原理和危害?
    1.1 基本原理
    Note
    XSS ( Cross Site Scripting ) 是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
    1.2 XSS攻击的危害
  2. 获取页面数据
  3. 获取cookie
  4. 劫持前端逻辑
  5. 发送请求
  6. 偷取网站任意数据
  7. 偷取用户资料
  8. 偷取用户密码和登陆态
  9. 欺骗用户
    1.3 XSS攻击分类
    1.3.1 反射型
    通过url参数直接注入。
    发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务端解析后返回,XSS代码随响应内容一起传回给浏览器,最后浏览器执行XSS代码。这个过程像一次反射,故叫做反射型XSS。
    举个例子
    一个链接,里面的query字段中包含一个script标签,这个标签的src就是恶意代码,用户点击了这个链接后会先向服务器发送请求,服务器返回时也携带了这个XSS代码,然后浏览器将查询的结果写入Html,这时恶意代码就被执行了。
    并不是在url中没有包含script标签的网址都是安全的,可以使用短网址来让网址变得很短。
    1.3.2 存储型
    Note
    存储型XSS会被保存到数据库,在其他用户访问(前端)到这条数据时,这个代码会在访问用户的浏览器端执行。
    举个例子
    比如攻击者在一篇文章的评论中写入了script标签,这个评论被保存数据库,当其他用户看到这篇文章时就会执行这个脚本。
    1.4 XSS攻击注入点
    ● HTML节点内容
    ○ 如果一个节点内容是动态生成的,而这个内容中包含用户输入。
    ● HTML属性
    ○ 某些节点属性值是由用户输入的内容生成的。那么可能会被封闭标签后添加script标签。


    ● Javascript代码
    ○ JS中包含由后台注入的变量或用户输入的信息。
    var data = "#{data}";
    var data = "hello"; alert(1);"";
    ● 富文本
  10. XSS 防御方法有哪些?
    Note
    对于 XSS 攻击来说,通常有两种方式可以用来防御。
    ● 转义字符
    ● CSP 内容安全策略
    2.1 转义字符
    ● 普通的输入 - 编码
    ○ 对用户输入数据进行HTML Entity编码(使用转义字符)
    ○ "
    ○ &
    ○ <
    ○ >
    ○ 空格
    ● 富文本 - 过滤(黑名单、白名单)
    ○ 移除上传的DOM属性,如onerror等
    ○ 移除用户上传的style节点、script节点、iframe节点等
    ● 较正
    ○ 避免直接对HTML Entity解码
    ○ 使用DOM Parse转换,校正不配对的DOM标签和属性
    2.1.1 对于会在DOM中出现的字符串(用户数据)
    < 转义为 \<
    转义为 >
    2.1.2 对于可能出现在DOM元素属性上的数据
    " 转义为 \" ' 转义为 \&9039; 空格转义为 \ 但这可能造成多个连续的空格,也可以不对空格转义,但是一定要为属性加双引号
    & 这个字符如果要转义,那么一定要放在转移函数的第一个来做
    2.1.3 避免JS中的插入
    var data = "#{data}";
    var data = "hello"; alert(1);"";
    因为是用引号将变量包裹起来的,而且被攻击也因为引号被提前结束,所以要做的就是将引号转义
    先 \ -> \\
    再 " -> \"
    2.2 富文本
    2.2.1 按照黑名单过滤script等
    Note
    但是html标签中能执行html代码的属性太多了,比如onclick, onhover,onerror,
    function xssFilter = function (html) {
    html = html.replace(/<\s\/?script\s>/g, '');
    html = html.repalce(/javascript:[^'"]/g, '');
    html = html.replace(/onerror\s=\s['"]?[^'"]*['"]?/g, '');
    //....
    return html;
    }
    2.2.1.1 按照白名单过滤
    Note
    只允许某些标签和属性存在
    做法:将HTML解析成树状结构,对于这个DOM树,一个一个的去看是否存在合法的标签和属性,如果不是就去掉。
    使用cheerio就可以快速的解析DOM
    function xssFilter (html) {

    const cheerio = require('cheerio');
    const $ = cheerio.load(html);

    //白名单
    const whiteList = {'img': ['src']}

    $('*').each((index, elem) => {
    if(!whiteList[elem.name]) {
    $(elem).remove();
    return;
    }
    for(let attr in elem.attribs) {
    if(whiteList[elem.name].indexOf(attr) === -1) {

     $(elem).attr(attr, null);
    

    }
    }
    })
    return html;
    }
    2.2.1.2 使用npm包来简化操作
    xss文档
    2.3 CSP 内容安全策略
    Note
    CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。
    通常可以通过两种方式来开启 CSP:
    ● 设置 HTTP Header 中的 Content-Security-Policy
    ● 设置 meta 标签的方式


以设置 HTTP Header 来举例
● 只允许加载本站资源
Content-Security-Policy: default-src ‘self’
● 图片只允许加载 HTTPS 协议
Content-Security-Policy: img-src https://*
● 允许加载任何来源框架
Content-Security-Policy: child-src 'none'
参考文章
● CSP ( Content Security Policy )
相关文章
|
存储 算法 搜索推荐
时间复杂度:一步步理解算法效率
时间复杂度:一步步理解算法效率,更多文章可关注我的微信公众号:Python学习杂记
1793 0
|
数据采集 安全 网络协议
DDoS 攻防之 HTTP Flood|学习笔记
快速学习 DDoS 攻防之 HTTP Flood
2008 0
DDoS 攻防之 HTTP Flood|学习笔记
|
6月前
|
机器学习/深度学习 人工智能 搜索推荐
LoRA 微调原理:参数高效微调的核心技术
LoRA(低秩适配)是当前最主流的大模型参数高效微调技术:通过冻结原模型、仅训练少量低秩矩阵,显著降低显存需求(消费卡即可运行),避免灾难性遗忘,且推理无损。本文深入浅出解析其原理、关键参数(秩r、学习率等)与实战要点,助初学者快速掌握。(239字)
|
算法 搜索推荐 Java
collections.shuffle
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的静态方法,基于 Fisher-Yates 算法实现,支持使用默认或自定义随机数生成器,适用于抽奖、游戏、随机抽样等场景,且会直接修改原列表。
468 0
|
10月前
|
缓存 安全 Java
如何理解Java中的并发?
Java并发指多任务交替执行,提升资源利用率与响应速度。通过线程实现,涉及线程安全、可见性、原子性等问题,需用synchronized、volatile、线程池及并发工具类解决,是高并发系统开发的关键基础。(238字)
453 5
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
573 1
|
存储 安全 Java
发现 XSS 漏洞?别急!SpringBoot这招轻松搞定!
在SpringBoot中,发现XSS(跨站脚本)漏洞时,可以通过一系列措施来轻松搞定这些安全问题。XSS攻击允许攻击者在受害者的浏览器中注入恶意脚本,这些脚本可以窃取用户的敏感信息、劫持用户会话或进行其他恶意操作。以下是一些在SpringBoot中修复XSS漏洞的有效方法
2898 7
|
NoSQL Java Redis
Jedis高版本的JedisPoolConfig没有maxActive和maxWait
在高版本的Jedis中,连接池配置属性发生了一些变化。通过使用 `JedisPoolConfig`中的新属性,可以更好地管理和优化Redis连接池。本指南提供了详细的配置方法和示例代码,帮助开发者快速上手并正确配置Jedis连接池。希望本文对您有所帮助,能够在项目中高效地使用Jedis与Redis。
635 14
|
SQL 安全 测试技术
渗透测试基础之永恒之蓝漏洞复现
对于当下来说我们使用的电脑大多是win11或是win10,还是有很多政府和公司,或是学校中使用的系统还停留在win7系统.今天是我进行渗透测试的第一次实战,通过永恒之蓝漏洞利用对win7系统进行渗透,当然也会对渗透测试的流程进行一个详细的介绍.,渗透测试的流程信息较为详细,内容较多,如果想看实战流程,直接通过通过这次的渗透测试,虽然不是对web间进行渗透测试,但是通过实战能够使我能够熟悉渗透测试的流程,当然在实践过程中也出现了很多问题,例如从kali上传文件到win主机路径出现问题,配置攻击模块时将ip地址设置错误,但在我不断的思考和尝试下,最终解决了问题,对于我的解决问题的能力也是一种提升.
1233 3
|
缓存 JSON 前端开发
探索 HTTP 请求的世界:get 和 post 的奥秘(下)
探索 HTTP 请求的世界:get 和 post 的奥秘(下)
探索 HTTP 请求的世界:get 和 post 的奥秘(下)