跨站脚本漏洞

 

XSS漏洞

一、文章简介

XSS漏洞是Web应用程序中最常见的漏洞之一。如果您的站点没有预防XSS漏洞的固定方法,那么很可能就存在XSS漏洞。
这篇文章将带你通过代码层面去理解三个问题:

  • 什么是XSS漏洞?

  • XSS漏洞有哪些分类?

  • 如何防范XSS漏洞?

二:三大分类

  • 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

  • 存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

  • DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。



三:原理

3.1 反射型XSS

在黑盒测试中,这种类型比较容易通过漏洞扫描器直接发现,我们只需要按照扫描结果进行相应的验证就可以了。

相对的在白盒审计中, 我们首先要寻找带参数的输出函数,接下来通过输出内容回溯到输入参数,观察是否过滤即可。
无案例不足以求真,这里我们选用echo()函数作为实例来分析:

新建 XssReflex.php,代码如下:

 


 
 
XSS 
 
 

'.$XssReflex; ?>

这是一个很简单、也很常见的页面:
变量 $XssReflex 获取 get 方式传递的变量名为 input 的变量值(值为一个字符串),然后直接通过echo()函数输出,注意这中间并未对用户输入进行任何过滤。

打开Firefox输入url:localhost/codeaudit/xss/XssReflex.php :



跨站脚本漏洞_第1张图片

 


当我们输入hello时,页面返回 hello :

跨站脚本漏洞_第2张图片

 

 

以上都为正常的输出,但如果我们输出一些javascript代码呢?

比如我们输入 :

你可能感兴趣的:(xss)