XSS的防御
HttpOnly:
浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。httponly解决的是XSS后的Cookie劫持。给cookie添加httponly代码。
输入检查,输出检查:
使用编码或转义的方式。使用正则表达式对输入加以限制。
若输出到客户端或者解释器的数据来自不可信的数据源,则须对该数据进行相应的编码或转义:
HTML实体编码:
&—— &;
<—— <;
>—— >;
"—— ";
'—— ';
/—— /;
HTML属性编码:
除字母数字外,转义所有带有HTML实体&#xHH的字符;格式化,包括空格字符,(HH=十六进制值)
URL编码:
URL只能使用ASCII字符集的方式在internet发送,由于URL通常包含ASCII字符集以外的字符,需要转换URL为有效的ASCII格式。URL编码通过使用%后面跟两位十六进制数的方式来替换不安全的ASCII字符,编码标准可参考:http://www.w3schools.com/tags/ref_urlencode.asp
JavaScript编码:
出字母数字外,转义所有带有\uXXXX unicode转义格式的字符(X=整数)
CSS十六进制编码:
CSS转义支持\XX和\XXXXXX,如果紧接的下一字符也为转义序列时,使用两字符的转义可能会导致问题。有两个解决方案:(a)CSS转义之后增加一个空格(空格被CSS解析器忽略);(b)通过填补零的方式使用完整的CSS转义。
处理富文本:
在标签选择上使用白名单,避免使用黑名单。
防御DOM Based XSS:
(未完成)