栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python网站安全(一): XSS注入

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python网站安全(一): XSS注入

服务器

例如,我们开发一个显示所有用户的留言的网站:
建立如下的flask项目:

app.py为python程序,代码:

import json
import flask

app = flask.Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    request = flask.request
    with open('messages.json', 'r', encoding='utf-8') as fp:
        data = json.load(fp)  # 读入用户留言
    data = list(data)  # 建议有这一句,防止JSON被篡改
    if request.method == 'GET':  # GET请求
        return flask.render_template('index.html', messages=data)
    else:   # POST请求
        message = request.form.get('message').strip()
        if not message:
            flask.flash('请填入信息')
            return flask.redirect(flask.url_for('index'))
        data.append(message)
        with open('messages.json', 'w', encoding='utf-8') as fp:
            json.dump(data, fp)  # 写入用户留言
        return flask.redirect(flask.url_for('index'))

app.run(debug=True)

index.html为网站页面,代码:




    
    测试XSS注入
    
    
    
    
    


    {% for i in messages %}
  • {{ i }}
  • {% endfor %}


留言:

{% for message in get_flashed_messages() %}
× {{ message }}
{% endfor %}

messages.json为用户信息储存器:

["test", "hello world"]

效果如下:

攻击者

现在,我们在网站的输入框中输入一句JavaScript代码:

alert("你已被XSS攻击!")


刷新网站后:

防御

(这里只提供最简单的思路)

我们加入如下代码:

nopass = ['