持久型XSS跨站脚本攻击和防御

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

      XSS原名CSS(cross-site script), 但与CSS(cascading style sheet)重名,所以就改名为XSS, 今天我们来了解一下XSS攻击和防御。

 

      XSS的本质是:坏人C写了一个恶意js脚本,然后让好人A的浏览器去执行这个恶意js脚本,从而实现对好人A的攻击。

 

      XSS有持久型、反射型和DOM型。持久型XSS是最好懂的,危害很大,本文会以持久型XSS为例,来说明XSS攻击和防御方法。

      持久型XSS也叫存储型XSS, 其攻击思路如图所示,一目了然:

       

      来看一下具体实例, 坏人C发表的微博内容如下:

It is sunny today:  <script> alert("xss attack")</script>

      当好人A去浏览这条微博内容时,微博服务器的逻辑如下(以Go代码为例):

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

    // 存储的恶意内容
    contentFromDB := `It is sunny today:  <script> alert("xss attack")</script>`
    str := "<html><body>" + contentFromDB + "</body></html>"      
    io.WriteString(w, str)
}


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

 

       好人A的浏览器要显示微博内容,随即弹框如下:

 

       这个js代码仅仅是一个简单的弹框,没有具体威胁。但是,这足以证明,好人A的浏览器确实执行了坏人C的js代码,那么,坏人C可以制作恶意的js内容,让好人A的浏览器执行,比如获取好人A的cookie信息,然后发送给坏人C的服务器。我们知道,cookie中有很多隐私信息,这样坏人C就能实施破坏活动了:比如恶意发表微博。

        

      在实际开发中,开发人员要增强安全意识,为用户的信息安全保驾护航。这其实就涉及XSS的防御,要对用户输入的特殊信息进行转换和过滤。

 

      看起来简单,其实不然,XSS的变化还是很灵活的,坏人的手段也很多,关于XSS的更多内容,后面慢慢聊。在实际工作中,曾遇到过XSS攻击。

      2011年,新浪微博就爆发过XSS攻击(和上述例子有所不同),持续了16分钟,被攻击的用户达到33000多个,危害十分严重:

 

 

       周末愉快,下次见。  

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值