我已经听到关于CSRF很久以前,我听到的大部分时间的事情是:
抵御CSRF攻击,从而使他人不自动提交表单 (使用机器人或东西)是非常重要的
嗯,这是不是100%真实的,是吗?
我一直在做网页刮3年左右,这是非常简单的提出请求,解析csrftokenmiddleware
领域,并张贴与其他字段一起。
那么,什么是真的呢?
我已经听到关于CSRF很久以前,我听到的大部分时间的事情是:
抵御CSRF攻击,从而使他人不自动提交表单 (使用机器人或东西)是非常重要的
嗯,这是不是100%真实的,是吗?
我一直在做网页刮3年左右,这是非常简单的提出请求,解析csrftokenmiddleware
领域,并张贴与其他字段一起。
那么,什么是真的呢?
想象一下,在电子银行Web应用程序banking.example.com
具有以下表单提交事务:
<form action="/transaction" method="post">
<input type="text" name="beneficiary"/>
<input type="text" name="amount"/>
<input type="submit" value="Pay"/>
</form>
攻击者现在就可以建立一个网站hacker.net
有以下几点:
<form action="https://banking.example.com/transaction" method="post" style="visibility:hidden">
<input type="text" name="beneficiary" value="John Doe, Account No. 34-236326-1"/>
<input type="text" name="amount" value="1000000"/>
<input type="submit" value="Pay"/>
</form>
<script>
document.forms[0].submit();
</script>
然后,攻击者诱骗受害者访问hacker.net
,这将导致受害者的浏览器发送POST请求的电子银行应用,使得大量的交易给黑客。 这工作,因为受害者的浏览器发送愉快会话cookie与伪造的POST请求到电子银行应用程序一起。 如果窗体将已经由CSRF令牌保护,那么攻击者不可能造成受害者的浏览器发送一个有效的POST请求,因此攻击是不可能的。
这种类型的攻击被称为跨站请求伪造(CSRF)攻击。
顺便说一句,CSRF攻击也是为什么人们给同时登录到电子银行或其他关键网络应用程序从来没有访问其他网站的意见的原因。
CSRF令牌不保护网络的形式由常规授权用户以自己的自动提交。 要从保护,你会使用一个CAPTCHA 。
是的,你可以刮表单并获取CSRF预防令牌。 但是你不能没有刮网站提交表单,你不能从别人那里得到一个令牌,然后提交表单-它连接到一个会话。 这就是CSRF保护真正防止有人诱使用户提交表单。
CSRFs的更一般的描述,最初发布响应Django的意见框架和CSRF :
一个CSRF是一种攻击如果有人未经允许访问资源的招数谁做的人有权限访问到它。
因此,举例来说,CSRF保护可以防止有人诱使用户张贴在它的垃圾邮件或恶意软件链接的注释。 另外,请求他们诱骗用户制作可变形,做出崩溃你的网络服务器,或包括通过意味着验证过程滑倒,造成伤害到你的数据库或以其他方式损害您的网站代码。
因此,没有CSRF保护有人可以,理论上,诱骗登录的用户将提交他们实际上并没有写评论。
随着CSRF保护,Django会检测到它是不是通过您网站上的实际表单提交真实的数据,并会拒绝它。
这是一个为不同类型场景的保护。 有时候,攻击者能够注入或者JavaScript中,无论是内部框架或IMG SRC-S是你的一个页面,在任何用户都可以访问记录的地方。 当用户访问该页面(假设与评论的页面,以及一个的评论攻击者发布请求的链接),该请求被通过的loggedIn用户的浏览器,完全与他的饼干。 CSRF保护基本上这种触发的提交的(简单的客户端的提交)。 当然,任何攻击者可以请求的页面,解析它的令牌,并创建与令牌的请求,但做不到这一点上的登录用户的身边。
您将无法
提出请求,解析csrftokenmiddleware场,并与其他领域的帖吧一起。
因为JS在不同的域名将无法读取和使用数据从您的域名,如果您的服务器配置为构建请求正确 。
阅读关于CORS 。