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

相关推荐
非 白2 分钟前
【Java】代理模式
java·开发语言·代理模式
知识分享小能手8 分钟前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易11 分钟前
大白话React第二章深入理解阶段
前端·javascript·react.js
muxue17811 分钟前
go:运行第一个go语言程序
开发语言·后端·golang
米饭好好吃.12 分钟前
【Go】Go wire 依赖注入
开发语言·后端·golang
闲猫12 分钟前
go 接口interface func (m Market) getName() string {
开发语言·后端·golang
可爱de艺艺13 分钟前
Go入门之struct
开发语言·后端·golang
信徒_16 分钟前
Go 语言中的协程
开发语言·后端·golang
晚安72016 分钟前
Ajax相关
前端·javascript·ajax
begei20 分钟前
飞牛os使用ddns-go配合华为云实现内网穿透
开发语言·golang·华为云