反射型XSS跨站脚本攻击和防御

133 篇文章 57 订阅
40 篇文章 10 订阅

      在前面的文章中,讲述了最好懂的存储型XSS攻击和防御,本文来聊聊反射型XSS,所谓反射,就像镜子一样,一束光发过去,立即弹回来。

      反射型XSS的攻击思路如下:

      这里依赖于微博服务器存在反射XSS漏洞。那么,坏人C为什么不自己搭建一个反射服务器进行反射呢?

      这是个好问题。以js获取cookie为例,如果坏人C自己搭建反射服务器,那么很显然document.cookie就无法获取好人A的微博cookie,所以,还是要用微博服务器做反射,这样才能获取好人A的微博cookie,从而进行攻击。

       

      我们以localhost作为微博服务的域名,来进行模拟。好人A登录微博后的cookie如下:

      坏人C开始实施攻击了:

      步骤1:坏人C给好人A发送一个链接,链接示意如下(在实际场景中,这个链接需要转换):

http://localhost:8080/static?para=<script>var allcookies = document.cookie;alert(allcookies);</script>

       

      步骤2: 好人A无意中点击了这个链接,向微博后台(localhost)发起http访问,微博后台的代码如下:

package main
 
import (
    "io"
    "log"
    "net/http"
)
 
func staticFile(w http.ResponseWriter, r *http.Request) {

    // 坏人C给好人A的http链接中,携带此参数,然后微博后台解析出此参数,即paraFromInput
    paraFromInput := `<script>var allcookies = document.cookie;alert(allcookies);</script>`
    str := "<html><body>" + paraFromInput + "</body></html>"      
    io.WriteString(w, str)
}


func main() {
    http.HandleFunc("/static", staticFile) 
    err := http.ListenAndServe("localhost:8080", nil)
    if err != nil {
        log.Println(err)
    }
}

       步骤3:微博后台服务反射,返回js代码,于是在好人A的浏览器中就出现了弹框,获取了好人A的微博cookie:

             

       步骤4:既然js脚本可以获取好人A的微博cookie, 很自然地,坏人C就有办法在js代码中把好人A的微博cookie劫持到坏人C的服务器,从而盗取了微博cookie, 实施破坏活动。

      反射型XSS也是有防御办法的,开发人员需要对内容进行过滤和变换。当然,设置cookie为httponly也是非常推荐的。如果一个网站的输入框,存在反射场景,那么很可能就存在反射XSS漏洞。

      我们可以看到,对于持久型XSS而言,只要用户正常浏览网页,就会中招,所以危害极大。而对于反射型XSS而言,需要诱导用户去点击恶意链接才能中招。提醒一下,别看到抽奖网页和红包网页就心动,别看到娱乐新闻就想八卦一下,别看到美女图片就精虫上脑,这些很多是骗子。

      最后说一下,作为开发人员,还是要谨慎,毕竟新浪微博当时就出过反射型XSS漏洞:

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值