xss漏洞
xss漏洞的特征是在页面输出里注入html或者脚本,利用script环境和html事件机制,在宿主浏览器端执行某些恶意操作。
比如,截获用户登录cookie.
要防止这种漏洞,需要在输出用户输入字符串的地方进行过滤。
1 对用户自创建的脚本环境和html环境进行过滤,比如对<,>,双引号进行转义,实体输出。
2 对于在html属性中输出的情况,最好用双引号包住变量。
<input type="text" name="param" value=$a/> <input type="text" name="param" value=$b/> <input type="text" name="param" value=$c/> <input type="text" name="param" value="$d"/> <input type="text" name="param" value='$e'/>
输入
$a='aa' onclick='alert(1)' $b=aa onclick='alert(2)' $c="aa" onclick='alert(3)' $d='aa' onclick='alert(4)' $e=aa' onclick='alert(5)
无双引号包含的成功注入,变量本身没有<>,"",因此1的转义方式对2 无效。
解决办法是属性加上双引号。
而事件属性比较难以防止,尽量不要在事件属性输出用户变量
如
<input type="text" name="param" onclick="$a" /> <input type="text" name="param" onclick="jsfun($b)" />
输入
$a=alert(1) $b=0);alert(2
<input type="text" name="param" onclick="alert(1)" /> <input type="text" name="param" onclick="jsfun(0);alert(2)" />
成功注入
3 在脚本环境中输出的变量。
<script> var a = $a var b = '$b' var c = "$c" $jscode </script>
输入
$a='';alert(1); $b=';alert(2);// $c=";alert(3);// $jscode=alert(4);
<script> var a = '';alert(1); var b = '';alert(2);//' var c = "";alert(3);//" alert(4); </script>
成功注入。
解决办法是用双引号输出,或者对变量的单引号进行\'和\"转义。
第四种难以预防,最好服务端不要采用这类方式实现。
总的来说,可以把xss漏洞的预防分为两块
A html输出,属性记得用双引号,对于<>等html标记必须进行转义,用实体输出。
B 脚本环境输出,var 变量赋值必须用单引号或者双引号输出,如果用双引号,那么必须对把变量的双引号转义成实体或\";如果用单引号,那么必须把单引号进行转义'->\'。
另外最好还要将/转义成\/,防止恶意代码逃逸出脚本环境。
相关推荐
csxiaoqiang 2020-07-26
ItBJLan 2020-06-11
qshpeng 2020-03-06
sswqycbailong 2020-02-16
layloge 2020-07-05
csxiaoqiang 2020-06-03
sunlizhen 2020-04-10
sswqycbailong 2020-07-28
码农成长记 2020-07-19
layloge 2020-06-26
liangjielaoshi 2020-06-25
csxiaoqiang 2020-06-16
某先生 2020-06-13
layloge 2020-06-07
sswqycbailong 2020-06-01
layloge 2020-05-30
码农成长记 2020-05-28
qidu 2020-05-26
zhuangnet 2020-05-20