跨站请求伪造

跨站请求伪造 (CSRF)

我的未来我决定 提交于 2020-12-06 12:36:52
跨站请求伪造 (CSRF) CSRF与跨站脚本(XSS)非常相似, 只有一个非常重要的不同之处。XSS利用客户端的弱点,而CSRF利用的是网站服务器的弱点。 按照OWASP, “一个CSRF袭击迫使某个登录的浏览器向易受攻击的Web应用发送一个请求,然后以受害者的名义,为入侵者的利益进行所选择的行动”(“OWASP Top 10”, 2007 (RC1), 19页)。 这段描述的关键部分是“强迫已登录的”受害者发送请求。攻击者利用网站对目标用户的信任。这意味着如果攻击取得成功,攻击者就能代表用户执行以下行为: ◆购买商品 ◆转账 ◆运行恶意软件,留下很少或不留下查明真实攻击者的痕迹 ◆进行股票交易 ◆订阅在线服务 CSRF并不是一个简单的问题。据ha.ckers.org创立者rsnake称,互联网上有太多CSRF脆弱性需要注意(Kelly Jackson Higgins,“CSRF脆弱性:‘一个沉睡的巨人’”,darkReading,2006年10月17日)。WhiteHat Security的建立者Jeremiah Grossman也赞同这个观点,他指出:“由于工作机制与Web相似,[CRSF]并不被看作是一个脆弱性”(同上)。 那么其工作原理是什么呢?HTML镜像标签和JavaScript镜像对象是CSRF最常用的两个路径

跨站请求伪造与 Same-Site Cookie

自作多情 提交于 2020-03-12 17:03:24
跨站请求伪造 跨站请求伪造(又被称为 CSRF 或者 XSRF ),它源自一个域网站向另一个域网站发起请求的简单功能。攻击者通过一些技术手段欺骗用户使用浏览器去访问一个自己曾经认证过的网站并执行一些敏感操作(如转账)。 一个域网站向另一个域的网站发起请求的方式有很多,例如点击一个超链接、加载静态资源、提交表单以及直接发起 ajax 请求等。如: < a href = " http://a.com/xx " > 点击有惊喜 </ a > # 诱导用户点击 < img src = " http://a.com/xx " > # 浏览器默认加载资源 - 图片 < link href = " http://a.com/xx " rel = " stylesheet " > # 浏览器默认加载资源 - css 文件 < form method = " post " action = " http://a.com/xx " > # 构造可以提交的表单 < input type = " text " name = " name " value = " value " > < input type = " submit " > </ form > 如果用户之前在 a.com 认证过,即浏览器保持有效的 cookie ,这些请求也会携带相应的 cookie ,而用户可能并不知情。 Same-Site

CSRF(跨站请求伪造)

╄→гoц情女王★ 提交于 2020-02-12 23:48:31
1.CSRF简介   CSRF的全名是Cross Site Request Forgery(跨站请求伪造),是一种诱使用户访问一个页面,然后盗用该用户身份在第三方站点里执行一次操作的攻击手段,其本质原因在于重要操作的所有参数都是可以被攻击者猜测到的。 2.CSRF检测   2.1 收集CSRF有利用价值的点(需要权限的)     csrf由于其利用的特殊性,并不需要将整个站点的所有数据包均测试一遍,只需测试有csrf价值的点( 需要权限的即时性的操作 )即可     如:转账、购物、修改密码、删除、发布内容...   2.2 GET类型的CSRF检测    如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,即存在CSRF漏洞。   2.3 POST类型的CSRF检测    如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,再去掉referer参数的内容,如果仍然可以,说明存在CSRF漏洞,可以利用构造外部form表单的形式,实现攻击。如果直接去掉referer参数请求失败,这种还可以继续验证对referer的判断是否严格,是否可以绕过。 3.CSRF实例   工具:burpsuite中Engagement tools的Generate CSRF PoC模块   3.1 抓取修改密码的数据包,发送到Repeater模块   3.2

DVWA之CSRF(跨站请求伪造)

坚强是说给别人听的谎言 提交于 2020-02-10 01:05:35
CSRF(Cross-site request forgery) CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。而最常见的就是QQ空间的登陆。 low级别: 代码: <?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pass_new = $_GET[ 'password_new' ]; $pass_conf = $_GET[ 'password_conf' ]; // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston

第十篇:跨站请求伪造csrf

假如想象 提交于 2020-02-07 21:04:45
钓鱼网站 钓鱼网站和正规网站的页面一模一样,提交网页数据的url也一样,但是会在页面中设置隐藏属性的form表单。例如转账:给用户书写的form表单,对方账号的input没有name属性,然后另外写一个具有默认的并且是隐藏的具有name属性的input框。 form表单如何通过csrf校验 为了防止此类事情的发生,我们使用csrf_token生成随机字符串 在form表单内添加: {% csrf_token %} browser客户端向服务端发动get请求,服务端返回给browser一串随机的字符串,当browser向服务端发送post请求时,会携带上该字符串,服务端会先对该随机字符串进行校验,如果客户端携带的字符串和服务器上的字符串一致,服务端会允许客户端提交post请求,否则会被forbidden掉。 当客户端向django服务端发送post请求,django中间件 django.middleware.csrf.CsrfViewMiddleware 会获取post中携带的name为“ csrfmiddlewaretoken ”的value是否和之前返回给客户端的value一致。 ajax如何通过csrf校验 第一种: 自己手动获取 <body> <form action="" method="post"> {% csrf_token %} <p>用户名:<input type=

Django-CSRF跨站请求伪造防护

不打扰是莪最后的温柔 提交于 2020-01-23 02:17:23
前言 CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。 攻击原理 1、用户访问正常的网站A,浏览器就会保存网站A的cookies。 2、用户在访问恶意网站B, 网站B上有某个隐藏的链接会自动请求网站A的链接地址,例如表单提交,传指定的参数。 3、恶意网站B的自动化请求,执行就是在用户A的同一个浏览器上,因此在访问网站A的时候,浏览器会自动带上网站A的cookies。 4、所以网站A在接收到请求之后,可判断当前用户登录状态,所以根据用户的权限做具体的操作逻辑。 防范措施 1、在指定表单或者请求头的里面添加一个随机值做为参数。 2、在响应的cookie里面也设置该随机值。 3、用户正常提交表单的时候会默认带上表单中的随机值,浏览器会自动带上cookie里面的随机值,那么服务器下次接受到请求之后就可以取出两个值进行校验。 4、对于网站B来说网站B在提交表单的时候不知道该随机值是什么,所以就形成不了攻击。 Django中CSRF中间件 django在创建项目的时候,默认就会有添加中间进行CSRF的保护,在MIDDLEWARE可以看到加载了 django.middleware.csrf.CsrfViewMiddleware

20170813-CSRF 跨站请求伪造

孤街浪徒 提交于 2020-01-19 20:34:21
CSRF CSRF是Cross Site Request Forgery的缩写,翻译过来就是跨站请求伪造。 跨站:顾名思义,就是从一个网站到另一个网站。 请求:即HTTP请求。 伪造:在这里可以理解为仿造、伪装。 综合起来的意思就是:从一个网站A中发起一个到网站B的请求,而这个请求是经过了伪装的,伪装操作达到的目的就是让请求看起来像是从网站B中发起的,也就是说,让B网站所在的服务器端误以为该请求是从自己网站发起的,而不是从A网站发起的。 CSRF 攻击是黑客借助受害者的 cookie 骗取服务器的信任,但是黑客并不能拿到 cookie,也看不到 cookie 的内容。另外,对于服务器返回的结果,由于浏览器同源策略的限制,黑客也无法进行解析。因此,黑客无法从返回的结果中得到任何东西,他所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。所以,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行 CSRF 的保护。 原理 图片来源: CSRF攻击原理以及nodejs的实现和防御  从上图可以看出,要伪装成从A网站发起请求,必须依次完成两个步骤:   1.登录受信任网站A,并在本地生成Cookie。   2.在不登出A的情况下,访问危险网站B。    之所以要伪装成从A网站发起

深入解析跨站请求伪造漏洞:原理剖析

纵然是瞬间 提交于 2019-12-29 11:34:36
相关文章: 1. http://www.cnblogs.com/xiaoqian1993/p/5816085.html 深入解析跨站请求伪造漏洞:原理剖析 2 .http://blog.csdn.net/kkdelta/article/details/17503947 web安全之跨站请求伪造 原理: CSRF攻击经常利用目标站点的身份验证机制,CSRF攻击这一弱点的根源在于Web的身份验证机制虽然可以向目标站点保证一个请求来自于某个用户的浏览器,但是却无法保证该请求的确是那个用户发出的或者是经过那个用户批准的。 CSRF和XSS攻击的区别 XSS攻击需要JavaScript,而CSRF攻击不需要;XSS攻击要求站点接受恶意代码,而对于CSRF攻击来说,恶意代码位于第三方站点上。过滤用户的输入可以防止恶意代码注入到某个站点,但是它无阻止法恶意代码在第三方站点上运行。由于恶意代码可以在第三方站点上运行,所以防御XSS攻击的措施无法保护站点不受CSRF攻击的危害。如果站点具有XSS攻击漏洞,那么它也有CSRF攻击漏洞。但是,即使站点针对XSS攻击采取了全面保护,却仍然面临CSRF攻击的威胁。 解决: (1)拒绝恶意请求。过滤器中添加如下。验证Referer请求来源: 1 //HTTP 头设置 Referer过滤 2 String referer = request2.getHeader

跨站请求伪造csrf和auth模块

こ雲淡風輕ζ 提交于 2019-12-06 15:11:27
目录 跨站请求伪造csrf 如何设置 ajax设置 方式一(J较为繁琐): 方式二(较为简单): 方式三(推荐): csrf相关装饰器 auth模块 如何拓展auth_user表字段 方式一: 方式二: 跨站请求伪造csrf 如何设置 你只要在写form表单的时候,只要在在表单中写一个{% csrf_token %} ''' <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>target_account:<input type="text" name="target_user"></p> <p>money:<input type="text" name="money"></p> <input type="submit"> </form> 网站在返回给用户一个form表单的时候 会自动在该表单隐藏一个input框 这个框的value是一个随机字符串 但是网站能够记住每一个浏览器发送的随机字符串 ''' ajax设置 方式一(J较为繁琐): ''' 先在页面任意的位置上书写{% csrf_token %} 然后在发送ajax请求的时候 通过标签查找获取随机字符串添加到data自定义对象即可 data:{'username':'jj'

django中csrftoken跨站请求伪造的几种方式

谁都会走 提交于 2019-12-06 05:28:31
1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击。但是这样直接注释掉并不是理智型的选择,这里我们介绍以下几种方式来解决这个问题。 csrf原理:先发送get请求,在用户浏览器上藏一段随机字符串,发送post请求时,浏览器自动携带该字符串来进行识别 2.方式一 在前端中添加{% csrf_token %},前端ajax发送的data数据中加上: csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val() 3.方式二 在ajax中添加X-CSRFToken的请求头,必须从cookie中取csrftoken的值 $('#login').click(function () { $.ajax( { url:{% url 'login' %}, type: 'post', headers:{ "X-CSRFToken":$.cookie('csrftoken') }, data: { user: $('[name="user"]').val(), pwd: $('[name="pwd"]').val() }, success: function (data) { data = JSON.parse(data);