from : http://hi.baidu.com/aullik5/blog/item/b2cdb4444d061c21cffca3a5.html
防范CSRF攻击的方案有许多种,有用验证码来防的(
tenfy:方案比较重,适合于敏感数据的变更类操作,对一般查询信息类不是很合适),更多的是生成一个
随机的token,当用户提交的时候,在服务器端比对一下token值是否正确,不正确就丢弃掉,正确就验证通过。
(因为有些人喜欢钻牛角尖,所以再次强调下,我们习惯于区分
CSRF和
XSRF,后者是在
XSS的情况下,防范CSRF和防范XSS是需要分开的两套防御方案)
由于CSRF的防范原理是比对token,所以需要存在两个token用来比对,其中一个,已经下发到用户的返回页面里去了,而且是用户提交请求时候的一个必须的参数。另外一个token,一般就存在于服务器的session中;当然这样会造成依赖于session,使得在restful的架构环境下不好在不同服务期间拷贝session,所以,还有一种做法就是将token放到保存了完整session的cookie中。
JJYY了这么多,只是简述了下anti-CSRF token的原理,在实际应用的时候,往往这个token是作为一个hidden字段加在form表单里的,或者是加在某些link里。
姑且不讨论框架实现的问题,
这个token最怕的就是泄露,XSS后之所以会让这个方案失效的原因就在于
XSS可以读到这个token(tenfy:该token的部署应该是自己站点才能读取和提交,第三方站点无法读取和提交,否则该token第三方站点也可以伪造,那么依赖该token的CSRF防范措施就会失效,所以token一般不能直接使用已有的cookie,因为这样的话,第三方站点进行提交请求发动CSRF攻击,该cookie也会被浏览器自动带给目标站点,token也不能显示的写在URL链接的地方并且是多次有效的,因为这样的话,第三方站点也可以直接拷贝该token后直接赋值到第三方站点的某个URL,通过诱导用户打开某个链接而自动提交该token,但可以依赖某个salt,该salt存储在cookie,如用户登录态key等,然后在自己站点动态执行脚本,对salt进行某种算法变换成一个token,并且该token通过脚本在自己站点提交的时候动态增加该参数进行提交,这样只所以成功是因为:对第三方站点,虽然发送CSRF请求浏览器会自动通过cookie带salt过去目标站点,但第三方站点无法通过脚本读取该cookie并进行按照某种算法转换成token,另外一方面我们的token是动态在自己站点附加到提交操作的)。
所以我们在布署CSRF token的时候,需要注意的一点,就是在一些页面里,需要慎重的加这个token,
因为可能会存在其他途径,导致这个token的泄露。
正确的做法是,将anti-CSRF Token加到form里,尽量减少加到link里的时候,重要操作都用form来完成。特别需要注意的是那些展示页面的url尽量不要加token.
分享到:
相关推荐
anti-csrf, 全功能反CSRF库 反csrf库 动机没有任何好的会话来支持CSRF保护库。 我们的意思是:CSRF令牌可以限制为以下任何或者全部:特定会话特定的HTTP URI特定的IP地址( 可选)可以存储多个CSRF令牌CSR
补丁加csrftoken从饼干作为X-CSRFToken头球每个SuperAgent的要求。 用法 // Just require patch require ( 'superagent-django-csrf' ) ; 安装 npm install superagent-django-csrf 执照 麻省理工学院:copyright:
npm install --save django-react-csrftoken 用法 import React from 'react' ; import DjangoCSRFToken from 'django-react-csrftoken' class MyLoginForm extends React . Component { render ( ) { return ( ...
它通过默认情况下对/进行AJAX HTTP HEAD调用来做到这一点,然后检索HTTP标头'X-CSRF-TOKEN'并在所有HTTP请求上设置相同的令牌。 spring-security-csrf-token-interceptor还支持配置CSRF标头名称,在出现Forbidden...
use ( VueCsrf , { selector : 'meta[name="csrf-token"]' , // selector of csrf element with csrf-token value attribute : 'content' , //attribute of csrf-token element} ) ; 然后您可以通过下一个命令获取...
介绍该项目用作解决与 Spring Security 和 Angular 相关的 HTTP 标头中缺少“X-CSRF-TOKEN”的问题的示例。 该示例使用 。 问题是 HEAD 不包含“X-CSRF-TOKEN”。
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。前文学习:[网络
next-csrf Next.js的CSRF缓解。 特征 next-csrf实现的缓解模式: 使用 (另请 ) ...export const { csrf , csrfToken } = nextCsrf ( options ) ; 初始化nextCsrf ,它将返回中间件和有效的签名CSRF令牌。
Laravel开发-cookie-csrf Laravel4自定义过滤器用于防止多次提交表单及跨域提交表单
nuxt-csrf 用于NUXT的CSRF模块安装安装模块 # NPMnpm install --save @privyid/nuxt-csrf# Yarnyarn add @privyid/nuxt-csrf 包含在nuxt.config.js // nuxt.config.js{ modules : [ // Simple usage '@privyid/nuxt-...
反CSRF库 动机 没有好的会话驱动的CSRF预防库。 好的,我们的意思是: 可以将CSRF令牌限制为以下任意一项或... use \ ParagonIE \ AntiCSRF \ AntiCSRF ; $ twigEnv -> addFunction ( new \ Twig_SimpleFunction
django-session-csrf, 无需 Cookies 就可以对 Django 进行CSRF保护 这是什么?django-session-csrf 是不使用 Cookies的Django 保护的另一个实现。 相反,它使用 Django 后端会话在服务器上维护CSRF令牌。 csrf令牌...
开源项目-gorilla-csrf.zip,gorilla/csrf provides Cross Site Request Forgery (CSRF) prevention middleware for Go web applications & services
Web安全的三个XSS-CSRF-CLICK攻防姿Web安全的三个XSS-CSRF-CLICK攻防姿
跨站请求伪造-CSRF防护方法跨站请求伪造-CSRF防护方法
从百度查到在django中,使用post方法时,需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站请求伪造,并稍加修改: 注:这是一个js文件,需要引入到html模板中:[removed][removed] 这样做比使用{% ...
此插件需要在index.html文件中提供名为X-CSRFToken的元标记。 您可以使用作为index.html文件的提供者。 安装 ember install ember-django-csrf CSRF 保护在每个带有X-CSRFToken标头的 AJAX 请求上默认启用。 您...
asgi-csrf ASGI中间件,用于防御CSRF攻击 ... 该令牌的值将通过scope["csrftoken"]函数提供给您的ASGI应用程序。 您的应用程序代码应将该值作为任何POST表单中的隐藏表单字段包括在内: < form
ng-rails-csrf 一起使用 AngularJS 和 Rails? 如果您正在发出任何 HTTP 请求,那么“ng-rails-csrf” gem 可以通过自动将 CSRF 令牌添加到 HTTP 标头来提供帮助。 如果您使用 CSRF 保护,Rails 将不会接受没有此...
$ npm install --save koa-csrf-header 用法 有多种方法可以在整个用户会话中存储 CSRF 令牌。 还有多种方法可以向下游发送 CSRF 令牌。 这个包对所有方法都是不可知的。 默认情况下, ctx.session.csrfToken用于...