Web安全之XSS跨站脚本攻击

XSS跨站脚本攻击指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,攻击成功后,攻击者可能得到包括但不限于更高的权限、私密网页内容、会话和cookie等各种内容。

一、原理

HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

二、XSS攻击分类

反射型XSS

非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。漏洞产生的原因是攻击者注入的数据反映在响应中。
简单例子

正常发送消息:

http://www.test.com/message.php?send=Hello,World!

接收者将会接收信息并显示Hello,Word

非正常发送消息:

http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!

接收者接收消息显示的时候将会弹出警告窗口。

流程如下图所示:
在这里插入图片描述

存储型XSS

持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。
简单例子:

从名字就可了解到存储型XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。例如留言板

留言板表单中的表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>

正常操作:

用户是提交相应留言信息;将数据存储到数据库;其他用户访问留言板,应从数据库中取出数据并显示。

非正常操作:

攻击者在value填写<script>alert(‘foolish!’)</script>【或者html其他标签(破坏样式。。。)、一段攻击型代码】;

将数据存储到数据库中;

其他用户取出数据显示的时候,将会执行这些攻击性代码。

流程如下图所示:
在这里插入图片描述

基于DOM的XSS

不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的。发生此种攻击的前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据。

例如页面不经过滤地从浏览器地址栏取数据写到页面中显示,如果在地址栏中插入一段恶意代码,则会被执行。

三、XSS的防御

XSS防御的总体思路是:对用户的输入(和URL参数)进行过滤,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。
发生了XSS攻击之后,很多情况下是窃取cookie信息,为了提高cookie安全性,可以将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了。(除此之外还有很多从cookie角度提高自身安全性的操作,后续更新…)。
与SQL注入发生的原因类似,XSS攻击也是由于前端与后端对用户的输入没有充分过滤导致的,所以最重要的漏洞修复方针就是:不相信用户提交的数据,过滤过滤过滤!

发布了11 篇原创文章 · 获赞 14 · 访问量 464

猜你喜欢

转载自blog.csdn.net/whuhewei/article/details/104860624