python网站安全(一): XSS注入
服务器
例如,我们开发一个显示所有用户的留言的网站:
建立如下的flask
项目:
app.py
为python程序,代码:
import json
import flaskapp = flask.Flask(__name__)@app.route('/', methods=['GET', 'POST'])
def index():request = flask.requestwith 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
为网站页面,代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试XSS注入</title><!-- 导入bootstrap --><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"><script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container"><ul><!-- Flask Jinja2模板-->{% for i in messages %}<li> {{ i }} </li>{% endfor %}</ul><br><hr><form method="post" action="/" class="bs-example bs-example-form" role="form"><!-- 用户输入框 --><div class="input-group" align="center"><span class="input-group-addon">留言:</span><input type="text" class="form-control" name="message"></div><hr><input type="submit" value="发送" class="btn btn-primary" align="center"></form>
</div>
{% for message in get_flashed_messages() %}
<div class="alert alert-warning"><a href="#" class="close" data-dismiss="alert">×</a><strong>{{ message }}</strong>
</div>
{% endfor %}
</body>
</html>
messages.json
为用户信息储存器:
["test", "hello world"]
效果如下:
攻击者
现在,我们在网站的输入框中输入一句JavaScript
代码:
alert("你已被XSS攻击!")
刷新网站后:
防御
(这里只提供最简单的思路)
我们加入如下代码:
nopass = ['<script>', 'SB'] # 违法字典,你也可以用它屏蔽脏话
for i in nopass:if i in message:flask.flash('信息不合法')return flask.redirect(flask.url_for('index'))
改动后的代码:
import json
import flaskapp = flask.Flask(__name__)@app.route('/', methods=['GET', 'POST'])
def index():request = flask.requestwith 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请求nopass = ['<script>', 'SB'] # 违法字典,你也可以用它屏蔽脏话message = request.form.get('message').strip()if not message:flask.flash('请填入信息')return flask.redirect(flask.url_for('index'))for i in nopass:if i in 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)
python网站安全(一): XSS注入相关推荐
- web漏洞利用---XSS注入攻击
XSS漏洞简介 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所 ...
- Java防止Xss注入json_浅谈 React 中的 XSS 攻击
作者:陈吉 转发链接:https://mp.weixin.qq.com/s/HweEFh78WXLawyQr_Vsl5g 前言 前端一般会面临 XSS 这样的安全风险,但随着 React 等现代前端框 ...
- php 避免xss_PHP防止XSS注入
我们在做网站的时候,经常有input提交,通常前端对input中的内容不做判断,只做不为空等简单的操作.但是,有的input中会提交一些javascript或者html,会给网站造成一定的危害.为此, ...
- 【渗透测试】XSS注入原理
目录 XSS注入原理 XSS的危害: XSS分类 XSS平台--漏洞利用 总结 答疑 XSS注入原理 XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, ...
- 拿到一个网站,怎么判断该网站是否存在sql注入漏洞?
漏洞挖掘 漏洞利用 修复漏洞 sql注入漏洞.文件操作漏洞.xss.rce.逻辑漏洞 反序列化.... sql注入漏洞: 网站的数据库 脱裤 拖取网站数据库 数据库基础: 数据库基本结构:数据库 -- ...
- XSS注入基础入门篇
XSS注入基础入门篇 1.XSS基础概念 2. XSS的分类以及示例 2.1 反射型XSS 2.1.1 示例1:dvwa low 级别的反射型XSS 2.1.2 攻击流程 2.2 DOM型XSS 2. ...
- WEB漏洞测试——HTML注入及XSS注入
HTML注入 原理 目前我们所接触展示页面基本上都是由html来实现的,那么后台在处理内容的时候,是对html很少处理的,如果用户刻意通过输入框.文本框.查询框来填写html.js代码(脚本注入),那 ...
- XSS注入(1)-两个简单测试理解反射型xss注入和存储型xss注入
XSS注入(1)-两个例子理解反射型xss注入和存储型xss注入 XSS全称 Cross Site Script,为使与css语言重名,所以我们将其称为xss跨站脚本攻击.它指的是恶意攻击者往Web页 ...
- XSS注入原理以及一些绕过姿势
介绍 XSS--跨站脚本攻击.通过这个攻击手段,攻击者可以将恶意的 JavaScript 代码插入存在 XSS 漏洞的 Web 页面中,当用户浏览带有恶意代码的页面时,这些恶意代码会被触发,从而达到攻 ...
最新文章
- DetachedCriteria 分页Projection取消聚合条件
- web.config中httpRunTime的属性(转)
- 苹果电脑通过密钥对的方式登录linux系统
- mysql数据库崩_mysql数据库崩溃_MySQL
- 一个从华为离职的朋友
- 故宫也在拼多多卖货!故宫文具将入驻拼多多开设旗舰店!
- CleanCodeHandbook Chapter 6: Misc(35-38)
- c语言中ftell函数是什么
- 最短路径spfa算法
- python游戏项目练习——逃出生天(2)
- C#-ShowWindow
- weak的创建与释放
- 时序分析 45 -- 时序数据转为空间数据 (四) 格拉姆角场 python 实践 (下)
- 20200909 Vedio Game 游戏平台数据分析
- 介绍大家一个很好玩的网站。多人在线flash联机游戏。
- Spring学习笔记(下)
- 产学交流 | 重庆理工大学计算机科学与工程学院一行到访芝诺数据
- IT运维大咖带你玩转企业信息运维自动化
- 【机器视觉】移动机器人控制软件的设计与实现
- codeblocks 注释取消红色下划线