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加解密工具对代码进行保护。

相关推荐
@解忧杂货铺37 分钟前
前端vue如何实现数字框中通过鼠标滚轮上下滚动增减数字
前端·javascript·vue.js
数据小爬虫@38 分钟前
Java爬虫实战:深度解析Lazada商品详情
java·开发语言
咕德猫宁丶40 分钟前
探秘Xss:原理、类型与防范全解析
java·网络·xss
songroom41 分钟前
Rust: offset祼指针操作
开发语言·算法·rust
code04号44 分钟前
C++练习:图论的两种遍历方式
开发语言·c++·图论
煤泥做不到的!2 小时前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H2 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
bryant_meng3 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
若亦_Royi4 小时前
C++ 的大括号的用法合集
开发语言·c++
资源补给站5 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机