例如,我们开发一个显示所有用户的留言的网站:
建立如下的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 = ['


