之前有一篇文章提到过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 = ["<", ">", "'", """, "%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)攻击。让我们详细拆解这段代码,并分析其工作原理和有效性。
代码拆解
-
检查
arr
是否为空:if (arr != null) {
代码首先检查变量
arr
是否为null
。如果arr
为null
,则不进行后续操作。 -
定义
filterXSS
函数:var filterXSS = function(e) {
filterXSS
是一个用于过滤 XSS 攻击的函数。它接收一个参数e
,表示需要过滤的输入。 -
检查
e
是否为空:if (!e) return e;
如果
e
为null
或undefined
,直接返回e
,不进行后续过滤。 -
反复解码
e
:for (; e != unescape(e); ) e = unescape(e);
这段代码使用
unescape
函数对e
进行反复解码,直到e
无法再被解码为止。这一步旨在处理被编码多次的攻击字符串。 -
替换潜在危险字符:
for (var r = ["<", ">", "'", '"', "%3c", "%3e", "%27", "%22", "%253c", "%253e", "%2527", "%2522"], n = ["<", ">", "'", """, "%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]);
这里定义了两个数组
r
和n
。r
包含需要替换的潜在危险字符及其编码形式,而n
包含相应的安全替换字符。通过循环,逐个将r
中的字符替换为n
中的字符。 -
返回过滤后的字符串:
return e
最终返回过滤后的字符串。
-
调用
filterXSS
并返回结果:return filterXSS(unescape(arr[2]));
对
arr[2]
进行解码,并将其传递给filterXSS
函数进行过滤,然后返回过滤后的结果。 -
处理空
arr
情况:;return null
如果
arr
为null
,则直接返回null
。
防御 XSS 的心得
- 多层次编码和解码: 在处理用户输入时,不仅要考虑原始输入,还要考虑多次编码后的输入。攻击者常常会对恶意脚本进行多次编码以绕过简单的过滤规则。代码中通过反复调用
unescape
函数处理了这种情况。 - 全面的字符替换: 代码中定义了一个字符替换列表,将
<
,>
,'
,"
等潜在危险字符及其多种编码形式替换为对应的安全字符。这种做法可以防止攻击者利用这些字符注入恶意脚本。 - 防御策略的全面性: 防御 XSS 攻击不仅仅是过滤和替换输入,还包括在输出时进行适当的编码和转义。在不同的上下文中(如 HTML、JavaScript、URL 等),需要使用不同的编码方法,以确保输出内容是安全的。
- 使用成熟的库和框架: 尽管自定义的过滤函数可以解决部分问题,但使用成熟的、安全的库和框架(如 OWASP 提供的库)往往更加可靠。这些库经过广泛测试,并包含了应对各种复杂攻击手段的策略。
- 不断更新和审计: 安全是一个不断变化的领域,新型攻击手段不断涌现。开发人员应定期更新和审计代码,确保其防御策略能够应对最新的安全威胁。
总之,防御 XSS 攻击需要从多个角度进行考虑和处理,包括输入过滤、输出编码以及使用可靠的安全库和框架。通过多层次的防御策略,可以有效地提高应用程序的安全性。
代码的防护jsjiami在线js加密解密工具
怎么隐藏你的xss保护逻辑呢,使用在线js加解密工具对代码进行保护。