上一篇讲了xss是什么的问题,这篇主要记录一些应对xss的处理问题。javascript
看了一些文章以后,总结就是预防xss的关键点就是在数据的输出点上,而不是用户的输入点。在数据输出点上作转义,也叫编码。参考了一些资料后,了解了浏览器的解码过程,在输出点上按解码过程,逆向编码应该就能够了,既然找到了这个须要编码的地方,那应该怎样处理呢。
那这里就涉及到编码和解码了,应该先熟悉一下。前端
这个应该是有不少的,这里主要讲html,js和url的编码与解码。java
html编码解码web
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编码解码 参考文章segmentfault
几个js的函数能够解决:
编码: encodeURI(),encodeURIComponent()
解码: decodeURI(),decodeURIComponent()后端
js编码解码浏览器
JS 中的转义都是经过反斜杠完成,有三种类型,以 ' 和 " 为例服务器
直接反斜杠 --> \'\"
十六进制 --> \x22\x27
Unicode --> \u0022\u0027cookie
其实我对js的编码还不是很理解,具体的编码函数是怎样的,哪位小伙伴能够指导一下。
http-only参数。在cookie参数中加入httpOnly属性,这样的话javascript就不能取到cookie值,能够解决一部分xss威胁。
对于后端模板生成的html,在数据生成到html的时候应该要转义。