【xss漏洞】存储型XSS漏洞修复

一、简单的测试

输入框输入<script>alert(document.cookie)</script>
得到结果,存在较为严重的存储型XSS漏洞在这里插入图片描述

二、代码分析

     2.1 输入处理代码分析

$message=escape($link, $message);	
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);

     2.2 输出处理代码

$message=escape($link, $message);	
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);

三、结论

     对输入的内容没有做任何过滤和转义,直接往数据库里插入了用户输入的内容,输出的时候也没有任何过滤和转义,直接取数据echo出来。

四、解决办法

     方法一:将危险的英文符号替换为安全的中文符号,破坏构造危险函数结构
	$message=str_replace(array("<",">","(",")","/","\\","|",'"',"'"), 
							array('《','》',"(",")","/","/","|",'`',"`"), 
							$_POST['message']);
	$message=escape($link, $message);	
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);

如图所示
在这里插入图片描述

     方法二:将可构建危险函数的词(<script、onclick、onmouse、onerror、<a)过滤
	$message=preg_replace(array('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i',
								'/(.*)o(.*)n(.*)c(.*)l(.*)i(.*)c(.*)k/i',
								'/(.*)o(.*)n(.*)l(.*)o(.*)a(.*)d/i',
								'/(.*)o(.*)n(.*)m(.*)o(.*)u(.*)s(.*)e/i',
								'/(.*)o(.*)n(.*)e(.*)r(.*)r(.*)o(.*)r/i',
								'/<(.*)a/i',
								), '', $_POST['message']);	
	$message=escape($link, $message);	
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);

如图所示
在这里插入图片描述

四、发现彩蛋——sql注入漏洞

if(array_key_exists('id', $_GET) && is_numeric($_GET['id'])){
//彩蛋:虽然这是个存储型xss的页面,但这里有个delete的sql注入
    $query="delete from message where id={$_GET['id']}";
    $result=execute($link, $query);

      4.1 解决办法

函数名释意
is_numeric()函数用于检测变量是否为数字或数字字符串。
is_int()判断是否为整型

显然,需要将is_numeric()替换为is_int()即可

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值