上一篇讲了xss是什么的问题,这篇主要记录一些应对xss的处理问题。
xss前端处理
看了一些文章之后,总结就是预防xss的关键点就是在数据的输出点上,而不是用户的输入点。在数据输出点上做转义,也叫编码。参考了一些资料后,了解了浏览器的解码过程,在输出点上按解码过程,逆向编码应该就可以了,既然找到了这个需要编码的地方,那应该怎样处理呢。
那这里就涉及到编码和解码了,应该先熟悉一下。
编码与解码
这个应该是有很多的,这里主要讲html,js和url的编码与解码。
html编码解码
var HtmlUtil = {
/*1.用浏览器内部转换器实现html转码*/
htmlEncode:function (html){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement ("div");
//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
(temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
var output = temp.innerHTML;
temp = null;
return output;
},
/*2.用浏览器内部转换器实现html解码*/
htmlDecode:function (text){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement("div");
//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
temp.innerHTML = text;
//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
var output = temp.innerText || temp.textContent;
temp = null;
return output;
}
};
url编码解码 参考文章
几个js的函数可以解决:
编码: encodeURI(),encodeURIComponent()
解码: decodeURI(),decodeURIComponent()
js编码解码
JS 中的转义都是通过反斜杠完成,有三种类型,以 ' 和 " 为例
直接反斜杠 --> \'\"
十六进制 --> \x22\x27
Unicode --> \u0022\u0027
其实我对js的编码还不是很理解,具体的编码函数是怎样的,哪位小伙伴可以指导一下。
xss服务器端处理
http-only参数。在cookie参数中加入httpOnly属性,这样的话javascript就不能取到cookie值,可以解决一部分xss威胁。
对于后端模板生成的html,在数据生成到html的时候应该要转义。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。