1 csrf定义

- csrf定义:Cross Site Request Forgery,跨站请求伪造
举例来说:
网站A伪造了一个图片链接:
<a href="http://www.cmbchina.com/?to=652222287448748&money=1999999><img></img></a>
该链接指向招商银行的转账链接, 而如果当前浏览器存储当前用户在招商银行Cookie。
用户登录了A网站,点击上面的图片,就会自动转账到用户6522222874487848,1999999金额。

2 csrf攻击原理

3 表单请求csrf攻击防御

    - 表单提交请求防范csrf攻击
a.原理:
表单的提交分为两个阶段:表单渲染,表单提交。 只要在表单提交的时候,检验提交的表单是否自己渲染的
即可
b.图片概括原理: c.详细介绍
后台渲染表单的时候,设置表单隐藏令牌token,
前端提交数据+令牌token,后台判断表单提交的令牌token是否自己颁发的 - 不要将请求的数据放在get中,而是通过POST/PUT/DELETE,通过表单提交。
- 表单提交数据,添加一个token
- 每次表单提交数据时,服务器都要求验证token
- token隐藏

4 表单请求csrf攻击防御原理图

5 ajax请求csrf攻击防御

    - ajax请求csrf攻击防御
a.原理:
get请求加载页面,+ ajax提交两个阶段。 服务器在响应get请求时设置cookie令牌
然后ajax请求携带上cookie令牌,后台检验ajax请求的cookie令牌是否自己颁发的即可

6 ajax请求csrf攻击防御原理图

7 csrf防御方案总结

    - csrf防御的方案:
服务器颁发一个令牌token,浏览器提交数据时带上令牌,服务器验证令牌是否自己颁发的。
对于表单提交来说,令牌token存储在表单DOM上,其他站点无法获取到。
对于Ajax提交来说,令牌token存储在Cookie上,其他站点无法获取到。

8 django form请求csrf防御实例

    - django防范Form表单请求csrf攻击
a.原理
- 通过中间件CsrfMiddleWare来进行csrf防护。
- django渲染表单时,随机生成令牌csrftoken,并设置隐藏在表单上
- 客户端提交form表单时,会将令牌一起携带
- 服务器在处理POST数据时,django会验证表单提交的csrfmiddlewaretoken值是否刚才自己设置的token;
不一样,返回403 Forbidden,非法请求
b.样例
- 使用form请求csrf防御
a. settings添加中间件'django.middleware.csrf.CsrfViewMiddleware'
b. 在表单上{% crsf_token %}
c. 实例
#前端
<form action="/csrf1.html" method="POST">
{% csrf_token %}
<input type="text" name="username" placeholder="用户名" id="user">
<input type="password" name="pwd" placeholder="密码" >
<input type="submit" value="提交">
</form>

9 django ajax请求csrf防御实例

    - django防范ajax请求csrf攻击
a.原理 ajax发送csrf, 消息头携带cookie的csrf
获取cookie里面的csrftoken, 并在请求头里面设置X-CSRFToken: csrftoken
前端js获取cookie,需要引入插件jquery.cookie.js b.实例
settings添加中间件'django.middleware.csrf.CsrfViewMiddleware'
<form action="/csrf1.html" method="POST">
<input type="text" name="username" placeholder="用户名" id="user">
<input type="password" name="pwd" placeholder="密码" >
<a onclick="submit_ajax()">ajax提交</a>
</form>
<script src="/static/js/jquery-1.12.4.js"></script>
<script src="/static/js/jquery.cookie.js"></script>
<script>
function submit_ajax() {
var token = $.cookie('csrftoken');
var user = $('#user').val();
$.ajax({
url: '/csrf1.html',
type: 'POST',
headers:{'X-CSRFToken': token},
data: {'username': user},
success: function (arg) {
console.log(arg)
}
}) } </script>

[oldboy-django][4python面试]有关csrf跨站伪造请求攻击的更多相关文章

  1. CSRF跨站伪造请求

    一.什么是CSRF CSRF(Cross Site Request Forgery) 跨站请求伪造.也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF ...

  2. Web安全之跨站伪造请求(CSRF)

    CSRF简介 CSRF全称跨站伪造请求(Cross-site request forgery)也称为one click attack/session riding,还可以缩写为XSRF 通俗说就是利用 ...

  3. django表单验证和跨站伪造csrf

    Form验证 django中的Form一般有两种功能: 输入html 验证用户输入 django使用内置form方法验证表单提交的数据 html页面 <!DOCTYPE html> < ...

  4. Django的安全机制 CSRF 跨站请求访问

    跨站请求伪造 一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防 ...

  5. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击

    CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...

  6. web攻击之二:CSRF跨站域请求伪造

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  7. 渗透之路基础 -- 跨站伪造请求CSRF

    漏洞产生原因及原理 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求. XSS利用站点内的信任用户,而CSR ...

  8. JavaScript 跨站伪造请求-CSRF

    CSRF: Cross-Site Request Forgery CSRF 概念 `定义`: 是一种对网站的而已利用,也被称之为one-click-attack 或者 session riding, ...

  9. 渗透实战(周四):CSRF跨站域请求伪造

    上图是广东外语外贸大学北校区内MBA中心旁边酒店房间的Wi-Fi网络环境,假设我们的Kali攻击机连入到SSID为414(房间号)的Wi-Fi网络,其IP地址:192.168.43.80 .同一Wi- ...

随机推荐

  1. Liunx开发(Extjs4.1+desktop+SSH2超强视频教程实践)(1)

    下周一出差宁波了,周六日就折腾点视频: 跟着视频教程开发,不过开发环境换linux,上月找工作,某个吉祥物是松鼠的公司要求用linux开发,没用过的,连面试机会都不给,极其高冷:好吧,咱就试试,用li ...

  2. angular4路由设置笔记

    场景说明:angular4开发的一个后台项目 一.可以使用angular-cli创建一个带路由的项目,ng new 项目名称 --routing 会多创建一个app-routing.module.ts ...

  3. TCP/IP与OSI参考模型原理

    网络是很重要同时也是很难理解的知识,这篇文章将会用自己容易理解的方式来记录有关网络的tcp与osi模型内容,不求专业深刻,但求通俗易懂也好. OSI参考模型 OSI定义了网络互连的七层框架(物理层.数 ...

  4. win10下安装mysql-5.7.23-winx64

    Step1 官方下载地址 https://dev.mysql.com/downloads/mysql/ 选择手动下载版本 解压到自己指定的路径 上图中的my.ini及data文件夹在压缩包里是没有的, ...

  5. 在基于vue-cli的项目自定义打包环境

    在工作当中,遇到了下面这个问题: 测试环境与生产环境中的用户权限不一样,因此,就需要根据测试环境打一个包,生产环境又打一个包.可是,如果每次打包都需要更改权限的配置文件的话,会很麻烦,而且,体现不出一 ...

  6. nuxt.js express模板项目IIS部署

    继续上一篇的nuxt/express项目部署,还是windows上要把nuxt的服务端渲染项目跑起来,这次的目的是用已经有的域名windows服务器上一个虚拟目录反向代理部署在其他端口nuxt项目. ...

  7. Table 分页处理

    介绍两种table分页处理:PHP分页 和 js(jquery.table)分页. 一:jquery.table: 1:下载两个文件:table_jui.css 和 jquery.dataTables ...

  8. 5458. 【NOIP2017提高A组冲刺11.7】质数

    5458. [NOIP2017提高A组冲刺11.7]质数 (File IO): input:prime.in output:prime.out Time Limits: 1000 ms  Memory ...

  9. Louis Armstrong【路易斯·阿姆斯特朗】

    Louis Armstrong Louis Armstrong had two famous nicknames. 路易斯·阿姆斯特朗有两个著名的绰号. Some people called him ...

  10. C++多态实例

    #include <iostream> #include <string> using namespace std; //class 实现 class Employee { s ...