业务场景
在删除商品的时候弹confirm咨询
是否删除某某某商品
,商品名入库时校验不当可能会引起xss漏洞
场景重现
虽然调用了
htmlspecialchars
,但在js里调用的时候,还是能被解析成js这类存储型的xss危害比较大
<?php
//入库的时候虽然调用了html编码函数
$xss = htmlspecialchars("<script>alert(11)</script>");
?>
<!DOCTYPE html>
<html>
<head>
<title>重现xss</title>
</head>
<body>
<input type="button" name="goods" value="编辑或删除" onclick="test('<?php echo $xss;?>')" >
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/layer/2.3/layer.js"></script>
<script type="text/javascript">
function test(name){
var confirm = "确定要删除或编辑:"+name + "吗?";
layer.confirm(confirm, function(){
});
}
</script>
</html>
解决方法
- 在数据入库的时候进行严格的判断,配合strip_tags一起使用
- waf防火墙,无论GET还是POST都要严格过滤