频道栏目
读书频道 > 安全 > Web前端黑客技术揭秘
6.7.2 浏览器的编码常识
2013-01-23 13:40:23     我来说两句
收藏   我要投稿

本文所属图书 > Web前端黑客技术揭秘

Web 前端的黑客攻防技术是一门非常新颖且有趣的黑客技术,主要包含Web 前端安全的跨站脚本(XSS)、跨站请求伪造(CSRF)、界面操作劫持这三大类,涉及的知识点涵盖信任与信任关系、Cookie安全、Flash 安全、...  立即去当当网订购

JavaScript中,有三套编/解码的函数,分别为:
escape/unescape
encodeURI/decodeURI
encodeURIComponent/decodeURIComponent

我们对字符串“<Hello+World>”用三种加密方式分别进行加密的结果如表6-2所示。

表6-2  三种编码函数加密的结果


加 密 方 式 加 密 结 果
Escape %3CHello+World%3E
EncodeURI %3CHello+World%3E
encodeURIComponent %3CHello%2BWorld%3E
 我们发现三种加密方法近乎相同,不过实际上它们还是有少许区别的。

escape不编码的字符有69个:

*、+、-、.、/、@、_、0~9、a~z、A~Z而且escape对0~255以外的unicode值进行编码时输出%u****格式。

encodeURI不编码的字符有82个:
!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~Z

encodeURIComponent不编码的字符有71个:
!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z

另外,我们可以编写一个函数来使escape可以对所有的字符进行编码,代码如下:
var ExEscape = function (str) {
    var _a, _b;
    var _c = "";
    for (var i = 0; i < str.length; i++) {
        _a = str.charCodeAt(i);
        _b = _a < 256 ? "%" : "%u"; //u不可以大写
        _b = _a < 16 ? "%0" : _b;
        _c += _b + _a.toString(16).toUpperCase(); //大小写皆可.toLowerCase()
    }
    return _c;
}

这样我们可以使用eval(unescape(%61%6C%65%72%74%28%31%29));的形式来绕过过滤器对某些关键词的过滤。

除了JavaScript提供的这三种加/解密方法外,我们还需要了解HTMLEncode、URLEncode、JSEncode、UTF-7编码、Base64编码的相关知识,这些内容将会在后面具体应用时深入探讨。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:6.7.1 浏览器的进制常识
下一篇:6.7.3 HTML中的代码注入技巧
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站