JS加密解密/XSS的防御

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

js 复制代码
分析一下这段代码,拆解一下代码,写一篇对于防御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 是否为空:

    js 复制代码
    if (arr != null) {

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

  2. 定义 filterXSS 函数:

    js 复制代码
    var filterXSS = function(e) {

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

  3. 检查 e 是否为空:

    js 复制代码
    if (!e) return e;

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

  4. 反复解码 e

    js 复制代码
    for (; e != unescape(e); ) e = unescape(e);

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

  5. 替换潜在危险字符:

    js 复制代码
    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. 返回过滤后的字符串:

    js 复制代码
    return e

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

  7. 调用 filterXSS 并返回结果:

    js 复制代码
    return filterXSS(unescape(arr[2]));

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

  8. 处理空 arr 情况:

    js 复制代码
    ;return null

    如果 arrnull,则直接返回 null

防御 XSS 的心得

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

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

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

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

相关推荐
gopher95111 分钟前
final,finally,finalize的区别
java·开发语言·jvm
m0_687399847 分钟前
QT combox 前缀匹配
开发语言·数据库·qt
汤兰月15 分钟前
Python中的观察者模式:从基础到实战
开发语言·python·观察者模式
DieSnowK16 分钟前
[C++][第三方库][httplib]详细讲解
服务器·开发语言·c++·http·第三方库·新手向·httplib
火红的小辣椒21 分钟前
PHP反序列化8(phar反序列化)
开发语言·web安全·php
一颗花生米。3 小时前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼3 小时前
Java基础-单例模式的实现
java·开发语言·单例模式
学习使我快乐013 小时前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
bobostudio19953 小时前
TypeScript 设计模式之【策略模式】
前端·javascript·设计模式·typescript·策略模式
通信仿真实验室4 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab