JS加密解密/XSS的防御

在这里插入图片描述

之前有一篇文章提到过xss,今天说一下防御策略

分析一下这段代码,拆解一下代码,写一篇对于防御xss的心得
if (arr != null) {
var filterXSS = function(e) {if (!e)return e;for (; e != unescape(e); )e = unescape(e);for (var r = ["<", ">", "'", '"', "%3c", "%3e", "%27", "%22", "%253c", "%253e", "%2527", "%2522"], n = ["&#x3c;", "&#x3e;", "&#x27;", "&#x22;", "%26%23x3c%3B", "%26%23x3e%3B", "%26%23x27%3B", "%26%23x22%3B", "%2526%2523x3c%253B", "%2526%2523x3e%253B", "%2526%2523x27%253B", "%2526%2523x22%253B"], a = 0; a < r.length; a++)e = e.replace(new RegExp(r[a],"gi"), n[a]);return e
};
return filterXSS(unescape(arr[2]));
}
;return null

这段代码的思路拆解

这段代码的目的是对用户输入进行过滤,以防止跨站脚本(XSS)攻击。让我们详细拆解这段代码,并分析其工作原理和有效性。

代码拆解

  1. 检查 arr 是否为空:

    if (arr != null) {
    

    代码首先检查变量 arr 是否为 null。如果 arrnull,则不进行后续操作。

  2. 定义 filterXSS 函数:

    var filterXSS = function(e) {
    

    filterXSS 是一个用于过滤 XSS 攻击的函数。它接收一个参数 e,表示需要过滤的输入。

  3. 检查 e 是否为空:

    if (!e) return e;
    

    如果 enullundefined,直接返回 e,不进行后续过滤。

  4. 反复解码 e

    for (; e != unescape(e); ) e = unescape(e);
    

    这段代码使用 unescape 函数对 e 进行反复解码,直到 e 无法再被解码为止。这一步旨在处理被编码多次的攻击字符串。

  5. 替换潜在危险字符:

    for (var r = ["<", ">", "'", '"', "%3c", "%3e", "%27", "%22", "%253c", "%253e", "%2527", "%2522"], n = ["&#x3c;", "&#x3e;", "&#x27;", "&#x22;", "%26%23x3c%3B", "%26%23x3e%3B", "%26%23x27%3B", "%26%23x22%3B", "%2526%2523x3c%253B", "%2526%2523x3e%253B", "%2526%2523x27%253B", "%2526%2523x22%253B"], a = 0; a < r.length; a++)e = e.replace(new RegExp(r[a],"gi"), n[a]);
    

    这里定义了两个数组 rnr 包含需要替换的潜在危险字符及其编码形式,而 n 包含相应的安全替换字符。通过循环,逐个将 r 中的字符替换为 n 中的字符。

  6. 返回过滤后的字符串:

    return e
    

    最终返回过滤后的字符串。

  7. 调用 filterXSS 并返回结果:

    return filterXSS(unescape(arr[2]));
    

    arr[2] 进行解码,并将其传递给 filterXSS 函数进行过滤,然后返回过滤后的结果。

  8. 处理空 arr 情况:

    ;return null
    

    如果 arrnull,则直接返回 null

防御 XSS 的心得

  1. 多层次编码和解码: 在处理用户输入时,不仅要考虑原始输入,还要考虑多次编码后的输入。攻击者常常会对恶意脚本进行多次编码以绕过简单的过滤规则。代码中通过反复调用 unescape 函数处理了这种情况。
  2. 全面的字符替换: 代码中定义了一个字符替换列表,将 <, >, ', " 等潜在危险字符及其多种编码形式替换为对应的安全字符。这种做法可以防止攻击者利用这些字符注入恶意脚本。
  3. 防御策略的全面性: 防御 XSS 攻击不仅仅是过滤和替换输入,还包括在输出时进行适当的编码和转义。在不同的上下文中(如 HTML、JavaScript、URL 等),需要使用不同的编码方法,以确保输出内容是安全的。
  4. 使用成熟的库和框架: 尽管自定义的过滤函数可以解决部分问题,但使用成熟的、安全的库和框架(如 OWASP 提供的库)往往更加可靠。这些库经过广泛测试,并包含了应对各种复杂攻击手段的策略。
  5. 不断更新和审计: 安全是一个不断变化的领域,新型攻击手段不断涌现。开发人员应定期更新和审计代码,确保其防御策略能够应对最新的安全威胁。

总之,防御 XSS 攻击需要从多个角度进行考虑和处理,包括输入过滤、输出编码以及使用可靠的安全库和框架。通过多层次的防御策略,可以有效地提高应用程序的安全性。

代码的防护jsjiami在线js加密解密工具

怎么隐藏你的xss保护逻辑呢,使用在线js加解密工具对代码进行保护。

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

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

相关文章

前端框架前置知识之Node.js:fs模块、path模块、http模块、端口号介绍

什么是模块&#xff1f; 类似插件&#xff0c;封装了方法 / 属性 fs 模块- 读写文件 代码示例 // 1. 加载 fs 模块对象 const fs require(fs) // 2. 写入文件内容 fs.writeFile(./test.txt, hello, Node.js, (err) > {if (err) console.log(err) //若 err不为空&#xf…

AI图 - 卡哇伊Q版 (7)

在看一本如何画Q版人物的绘画书时&#xff0c;收集了一些图片想临摹&#xff0c;收集过程中发现同类图片越来越多&#xff0c;肯定都是AI生成的了&#xff0c;就去搜有没有同款现成的Lora可用&#xff0c;下载了几个效果都很差&#xff0c;就找回以前的经验&#xff0c;准备了一…

数据结构--关键路径

事件v1-表示整个工程开始&#xff08;源点&#xff1a;入度为0的顶点&#xff09; 事件v9-表示整个工程结束&#xff08;汇点&#xff1a;出度为0的顶点&#xff09; 关键路径&#xff1a;路径长度最长的路径 求解关键路径问题&#xff08;AOE网&#xff09; 定义四个描述量 …

事务详讲(本地及分布式)

本地事务在分布式的问题: 因为在分布式服务中,难免一个接口中会有很多调用远程服务的情况,这个就非常容易出现问题,以下是一个详细的例子: 例如,你为了保证事物的一致性等要求,所以,你方法上只写了Transactional,但你的业务中又需要调用其他微服务的方法(Feign),这时就容易出现…

神经网络基础

文章目录 一、神经网络的基本构成部分1.1 神经元1.2 单层神经网络1.3 多层神经网络1.4 非线性激活函数&#xff08;activation functions&#xff09;1.5 输出形式 二、神经网络的训练方式2.1 损失函数2.2 梯度下降法2.3 反向传播&#xff08;Backpropagation&#xff09; 三、…

二叉查找树

一、实验题目 &#xff08;1&#xff09;实验题目 二叉查找树 &#xff08;2&#xff09;问题描述 对于查找集合进行动态查找&#xff0c;为了使得元素的插入、删除和查找操作都能够很快地完成&#xff0c;可以采用二叉查找树作为查找结构。对于给定的查找集合&#xff0c;给出…

UFS协议—新手快速入门(二)【5-6】

目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门&#xff08;一&#xff09;【1-4】 五、UFS协议栈 UFS&#xff08;Universal Flash Storage&#xff09;协议是针对固态存储设备&…

【UE5教程】使用蓝图显示鼠标

首先&#xff0c;在您的项目中创建一个新的蓝图类&#xff0c;继承自PlayerController。在蓝图编辑器中&#xff0c;找到Event BeginPlay节点&#xff0c;并从它引出一条线。添加Set Show Mouse Cursor节点&#xff0c;勾选Visible&#xff0c;以确保鼠标在游戏开始时可见。 鼠…

SpringCloud Consul基础入门与使用实践总结

【1】Consul简介 官网地址&#xff1a;https://www.consul.io/intro/index.html 下载地址&#xff1a;https://www.consul.io/downloads.html 中文文档&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html ① 基础概念 Consul 是一套开源的分布式服务发现和…

AI网络爬虫:对网页指定区域批量截图

对网页指定区域批量截图&#xff0c;可以在deepseek的代码助手中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步一步的思考&#xff0c;完成一个对网页指定区域截图的python脚本的任务&#xff0c;具体步骤如下&#xff1a; 设置User-Agent: Mozilla/5.0 (…

Visual C++2010学习版详细安装教程(超详细图文)

Visual C 介绍 Visual C&#xff08;简称VC&#xff09;是微软公司推出的一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于开发C和C语言的应用程序。它提供了强大的编辑器、编译器、调试器、库和框架支持&#xff0c;以及丰富的工具和选项&#xff0c;使得开…

Android约束布局ConstraintLayout的使用

Android引入约束布局的目的是为了减少布局层级的嵌套&#xff0c;从而提升渲染性能。约束布局综合线性布局、相对布局、帧布局的部分功能&#xff0c;缺点也很明显&#xff0c;就是可能要多写几行代码。所以约束布局使用时&#xff0c;还得综合考虑代码量。提升性能也并不一定非…

CTFHUB-技能树-web-web前置技能-HTTP协议全

目录 1.请求方式 2.302跳转 3.Cookie 4.基础认证 5.响应包源码 1.请求方式 curl -v -X http://challenge-3022c877a8dcedeb.sandbox.ctfhub.com:10800/index.php 2.302跳转 参考链接&#xff1a;http://t.csdnimg.cn/aqdNG 301——永久性重定向。该状态码表示请求的资源已…

LangChain知识库构建与RAG设计

RAG:检索增强生成是什么? RAG的主要流程 Retrieval-Augmented Generation: 检索增强生成 能够根据问题的特点还有上下文, 生成更加个性化和精确的回答 为LLM提供来自外部知识源的额外信息的概念。这允许它们生成更准确和有上下文的答案&#xff0c;同时减少幻觉(1)检索&…

初识C++ · 模拟实现stack和Queue

目录 前言&#xff1a; 1 Stack 1.1 双端队列 2 Queue 前言&#xff1a; 经历了list三个自定义类型的洗礼&#xff0c;来个简单的放松放松&#xff0c;即栈和队列&#xff1a; 文档记录的&#xff0c;栈和队列是一种容器适配器&#xff0c;它们不属于stl&#xff0c;但是它…

平板显示LED背光芯片OC6700,输入3.6V~60V,升压型 LED 恒流驱动器

概述 OC6700是一款内置60V功率NMOS高效率、高精度的升压型大功率LED恒流驱动芯片。OC6700采用固定关断时间的控制方式&#xff0c;关断时间可通过外部电容进行调节&#xff0c;工作频率可根据用户要求而改变。OC6700通过调节外置的电流采样电阻&#xff0c;能控制高亮度LED灯的…

LangChain v0.2介绍

LangChain v0.2介绍 LangSmith&#xff1a;一个开发者平台&#xff0c;可调试、测试、评估和监控LLM应用程序。 LangServe&#xff1a;用于将 LangChain 链部署为 REST API 的包。可以轻松启动并运行生产就绪的 API。 LangChain&#xff1a;包含构成认知架构的链、代理和检索策…

香橙派Orange AI Pro / 华为昇腾310芯片 部署自己训练的yolov8模型进行中国象棋识别

香橙派Orange AI Pro / 华为昇腾310芯片 部署自己训练的yolov8模型进行中国象棋识别 一、香橙派简介1.1、香橙派 AI Pro 硬件资源介绍1.2、华为昇腾310&#xff08;Ascend310&#xff09; 简介1.3、 昇腾310AI能力和CANN 简介昇腾310 NPU简介 二、远程环境配置2.1、ssh2.2、vnc…

springboot管理的各依赖版本查看

找一个springboot相关的依赖&#xff0c;比如这里我找mybatis 鼠标点击artifactId名称&#xff0c;图中蓝色字段&#xff0c;跳转到springboot依赖&#xff08;鼠标悬停在上面变成蓝色表示可点击跳转&#xff09;&#xff0c; 点击spring-boot-dependencites&#xff0c;跳转到…

list(二)和_stack_queue

嗨喽大家好&#xff0c;时隔许久阿鑫又给大家带来了新的博客&#xff0c;list的模拟实现&#xff08;二&#xff09;以及_stack_queue&#xff0c;下面让我们开始今天的学习吧&#xff01; list(二)和_stack_queue 1.list的构造函数 2.设计模式之适配器和迭代器 3.新容器de…