XSS安全防御
思路
XSS防御的总体思路是:对输入进行过滤,对输出进行编码
过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义()
绕过案例
xss之href输出绕过:
代码层面:`$html.=‘’<a href ='{message}'>`
message为提交的信息
javascript:alert(1111)直接代入a标签herf里面一样可以绕过htmlspecialchars
解决
href后面一般去接网址
在用户输入的时候添加判断
只允许http,https开头其次再进行htmlspecialchar函数处理
xss之js输出绕过:
代码层面:
<script>
$ms='11'</script><script>alert(1111)</script> ;
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}
}
</script>
payload为1'</script><script>alert(1111)</script>
输入动态生成到js中,形成xss,javascript中是不会对tag与字符实体进行解释的,所以要进行js转译
这里如果进行实体编码,虽然可以解决XSS问题,但是实体编码后的内容,在js里面不会进行翻译,这样会导致前端功能无法使用的,所以在这里采用使用\对特殊字符进行转义