接上篇
csrf攻击与防护—1用flask简单演示csrf攻击

以下是根据referer字段防止csrf攻击的新代码:
bank.py

import uuid
from flask import render_template, Flask, request, jsonify, make_responseapp = Flask("haha")
YOUR_BANK_ACOUNT = 1000000000
ID = str(uuid.uuid1())@app.route("/")
def root():response = make_response(render_template("bank_page.html"))response.set_cookie("id", ID)return response@app.route("/quit")
def quit():response = make_response("退出成功!")response.delete_cookie("id")return response@app.route("/transfer_money")
def form():# 简单验证cookieif ID != request.cookies.get("id"):print("cookie验证失败!可能正遭受攻击!")return jsonify({"status": "Fail"})# 防止csrf攻击手段1 -- refer验证refer = request.headers.environ.get("HTTP_REFERER")if refer != "http://127.0.0.1:8082/":print("refer验证失败!可能正遭受攻击!")return jsonify({"status": "Fail"})global YOUR_BANK_ACOUNTcash = int(request.values.get("money"))YOUR_BANK_ACOUNT -= cashprint(f"Transfer {cash} yuan, YOUR_BANK_COUNT left {YOUR_BANK_ACOUNT}")return jsonify({"status": "OK"})if __name__ == "__main__":app.run(port=8082)

referer 验证

根据HTTP协议,在http请求头中包含一个referer的字段,这个字段记录了该http请求的原地址.通常情况下,执行转账操作的post请求http://127.0.0.1:8082/transfer_money应该是点击http://127.0.0.1:8082/网页的提交按钮来触发的操作,这个时候转账请求的referer应该是http://127.0.0.1:8082/ 。而如果黑客要进行csrf攻击,只能在自己的网站http://127.0.0.1:8083/上伪造请求.伪造请求的referer是http://127.0.0.1:8083/。所以我们通过对比post请求的referer是不是http://127.0.0.1:8082/就可以判断请求是否合法.

这种方式验证比较简单,网站开发者只要检查referer就可以,但是由于referer是由浏览器提供的.虽然http协议有要求不能篡改referer的值.但是一个网站的安全性绝对不能交由其他人员来保证。

每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值。如果 bank.example 网站支持 IE6 浏览器,黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可以通过验证,从而进行 CSRF 攻击。

即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种方法仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer 值会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问

csrf攻击与防护—3用flask简单演示防范csrf攻击之token验证

原文参考:
CSRF攻击原理及预防手段
安全篇——如何预防CSRF攻击

csrf攻击与防护—2用flask简单演示防范csrf攻击之referer相关推荐

  1. DDoS 攻击与防护(一):如何识别 DDoS 攻击?DDoS 防护 ADS 服务有哪些?

    文章目录 前言 一.什么是 DDoS 防护 ADS? 1.1.什么是 DDoS 攻击? 1.2.如何识别 DDoS 攻击? 1.3.从 Web 访问流程分析 DDoS 攻击 1.4.DDoS 攻击类型 ...

  2. 「安全系列之CSRF」如何防范csrf攻击

    背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XSS.CSRF 等安全问题之外,又时常遭遇网络劫持 ...

  3. DDoS 攻击与防护(二):DDoS 防护购买和使用入门指南,DDoS 防护服务有哪些应用场景?

    文章目录 前言 一.如何选择 DDoS 高防和 DDoS 原生高级防护? 二.如何购买和使用 DDoS 高防? 2.1.购买 DDoS 高防 2.2.DDoS 高防域名网站类业务接入流程 2.3.配置 ...

  4. WEB攻击之CSRF攻击与防护

    分享一下我的偶像大神的人工智能教程!http://blog.csdn.net/jiangjunshow 也欢迎转载我的文章,转载请注明出处 https://blog.csdn.net/aabbyyz ...

  5. 万字讲解9种Web应用攻击与防护安全。XSS、CSRF、SQL注入等是如何实现的

    OWASP(开放Web软体安全项目- Open Web Application Security Project) 是一个开源的.非盈利的全球性安全组织,致力于应用软件的安全研究.使命 是使应用软件更 ...

  6. PHP开发中csrf攻击的简单演示和防范

    CSRF的全名为Cross-site request forgery,它的中文名为 跨站请求伪造(伪造跨站请求[这样读顺口一点])CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻 ...

  7. 黑客零基础入门:手把手带你实现简单的QQ/邮件攻击,注册表/系统安全防护,学不会请给我只因木马

    毋庸置疑,互联网已经深入人们日常生活和工作的各个角落,人们在享受网络带来的便利的同时,多数网民都在面临着不同程度的网络安全的威胁.很多人对黑客攻防感到"畏惧",觉得其过于复杂,他们 ...

  8. 什么是CSRF攻击,如何防范CSRF攻击?

    一.什么是CSRF攻击 CSRF攻击的全称为跨站脚本伪造,也称为One Click Attack或者Session Eiding,通常缩写为CSRF或者XSRF.CSRF通过伪装来自受信任的用户的请求 ...

  9. 网络/Network - 网络安全 - 常见web攻击与防护

    前言 网络世界, 没有所谓的安全, 任何系统都存在漏洞, 只要时间足够以及具备值得被攻破的价值. 就会被攻击. 攻与防之间,本来就没有绝对的安全. 我们能做的就是,尽量提高攻击的成本. 有时有些方案虽 ...

最新文章

  1. 字节流数据的写出(输出)和读取(输入)
  2. vue中常碰见的坑_Vue 与 Vuex 的第一次接触遇到的坑
  3. xcode打包(Archive)显示Command /usr/bin/codesign failed
  4. 利用被入侵的路由器迈入内网——抓包,利用路由器漏洞入侵,进行流量劫持...
  5. 基于OpenStreetMap计算驾车距离(Java)
  6. 根据坐标如何标记图片_推荐收藏 | 一文搞定SCI论文图片
  7. 亚马逊封店潮之后,跨境电商卖家该如何调整来拓展新的市场?
  8. python include的功能_在Python的Config中增加Include功能
  9. uboot启动第二阶段——start_armboot
  10. linux收集完整技术支持信息的命令有,Linux下常用的日志收集命令(RedhatSuSe)
  11. 计算机中的基础元素,数据结构基础
  12. Test on 2018.10.21
  13. 如何利用ECRS原则进行线平衡改善?
  14. duet二重奏hp_Duet游戏安卓下载|Duet二重奏最新版下载v2.0.4-乐游网安卓下载
  15. 凤凰服务器系统,凤凰系统云服务器
  16. win10电脑打开计算机快捷键,win10如何打开计算器工具 快速打开Win10计算器的四种方法...
  17. 计算机关闭后桌面文件丢失,win7系统电脑关机重启后桌面文件全部不见了的解决方法...
  18. 晶体二极管工作原理(详解)
  19. c语言课程设计家谱管理系统,数据结构-家谱管理系统
  20. steam的游戏id怎么查?

热门文章

  1. 几种常用交叉验证(cross validation)方式的比较
  2. STM32G030 低功耗
  3. psd格式图片一键切图
  4. 两个栈来实现一个队列的C++代码(某公司社会招聘笔试题)
  5. 加拿大海运专线操作流程详解
  6. Xshell重启服务器
  7. 一般游戏原画制作的步骤是什么
  8. 高效使用Mac标签功能
  9. 码云gitee 部署公钥匙
  10. 遗传算法(三)——基本遗传算法