有哪些方法可以不使用csrf token就能token防御csrff

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
网易杭州 QA Team
务实 专注 分享 做有态度的QA
LOFTER精选
网易考拉推荐
接口测试中如何通过csrftoken实现https登录&&
09:39:21|&&分类:
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
什么是CSRF攻击由于所处的项目是新项目为了防止CSRF攻击,在后端上加入CSRF的防范攻击措施,那么很多同学就好奇什么是CSRF攻击,下面是关于CSRF的解释:Cross-Site Request Forgery (CSRF)&is an attack outlined in the&OWASP Top 10&whereby a malicious website will send a request to a web application that a user is already authenticated against from a different website. This way an attacker can access functionality in a target web application via the victim's already authenticated browser. Targets include web applications like social media, in-browser email clients, online banking and web interfaces for network devices.(英文好的同学可自行理解,稍差的同学可以Google翻译理解)简而言之,跨站点请求伪造(CSRF)指的是一种通过一种恶意的数据挟持去访问第三方的网站攻击技术。举一个例子,小A登录网银进行了相关账号操作(如下图),而此时他登录第三方的恶意网站,执行的恶意脚本会伪造出一个假冒的对网银网站的请求(转账、汇款等),而网银网站无法识别此次请求的来源是一个非用户的行为,所以会给网络信息带来极大的安全隐患。归根结底,CSRF攻击的本质是攻击者伪造了合法的身份,对网站系统进行访问和操作。如果能够识别出访问者的伪造身份,也就能识别CSRF攻击。因此网站设计开发时如何防止CSRF攻击成为了一个重要的安全保障。&如何应对CSRF攻击通常有以下两种种常见防范CSRF攻击的方式:1,运用token作为用户与网站的“请求令牌”,实现策略十分简单,服务器在每次新用户方位此网站的时候生成一个伪随机序列token值,存入浏览器cookie当中,然后在之后的所有请求中把该token以隐藏域的形势存入到http或https请求当中,而每一次请求服务器端都会验证两边(request中token和后端保存的token)的token是否一致,只有一致的时候才会接后续关处理请求,否则返回HTTP 403页面拒绝登录或者要求用户重新登录并分配新的token值缺点:尽管采用token的方式的安全保障已经基本防止了csrf攻击的可能性,但是没有网站有绝对安全的防御,一旦恶意用户通过XSS等方式获取了存储在浏览器中的cookie中,再利用cookie中隐藏的token信息实现攻击。所以在不可能根本解决恶意攻击的前提下,如何提高攻击者的成本则成了重中之重2,验证HTTP referer信息。http请求中报头有一个字段为referer,该字段信息记录的这个请求的来源地,在通常情况下访问一个安全受限页面的请求必须来自同一个网站,如果一个攻击者发起恶意攻击时,被攻击网站可以根据referer上的字段信息过滤掉非本站的请求,如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。缺点:如果攻击者设定正确HTTP referer信息,则所有的恶意请求都会被通过,所以这种防范策略基本属于鸵鸟政策,不建议采纳。web项目中如何加入防范CSRF攻击策略一个新用户登录本网站时都会被分配一个伪随机字符串作为csrf token,而后所有的操作请求都会将这个token值作为传入参数加入到request当中。而这个token值只有在以下情况才会更新:1,用户第一次登录网站时,会被赋予一个token值2,token值得时效为30分钟,超出时效后端重新分配3,本地cookie中存储的token被清空时并再访问网站,后端重新分配在开发原来定义的登录接口中,登录时我们向/api/vi/member/login的post登录数据,但是在实际登录中如上图加入了query string parameter =&“netease_ct=b96d094576"用来标记每次用户的token,一旦调用接口时传入的token值失效或者为空时,后端都就判定是一次无效的url访问,并返回给前端,这样也就杜绝了CSRF攻击(前提是第三方网站无法获取本地cookie存储的token值)如何在接口测试中模拟登录以上我们知道了web项目中如何应对CSRF攻击,但是接口测试工程模拟的http或https请求与浏览器中发起request请求最大的不同就是浏览器中保存的本地cookie,而此cookie可作为request header可继续作为参数代入后面对的request当中,其中包含了防范csrf最重要的token值。但是java写的接口测试本无保存cookie,所以在依赖httpclient时发起的每一次模拟请求中当中是不包含token信息的,那么作为后端接收到的每一次request都是来自不同用户,并分配了不同的token值,所以我们需要使每一次页面访问都包含正确统一的token信息,使得后端可以判断多次的请求都来自同一"用户"。应对措施:所以在接口测试中,作者提前模拟了一次http网站请求,将第一次访问时分配的token值(cookie中netease_ct的value)保存下来而保存下来的token值作为request header中的cookie项,用来标记每一次的用户请求都是来自同一个”用户“,完整的示意图如下同时所获取的token值也要放入每次相关请求的url中,例如https://k12./api/v1/member/login?netease_ct=b96d094576中通过testng的模拟登录接口测试,可以发现这种SET COOKIE的方式可以实现”动态"登录(动态指的是因为每次的url中query string parameter不同)结论CSRF攻击作为一种常见的互联网攻击措施给用户的数据(特别是信息账号)带来极大的安全隐患,因此引入了基于token值得防范措施,其策略基本可以概括为利用分配的随机token值作为用户访问标识,并过滤掉一切token值过期或无效的页面访问。因此在基于testng的接口测试项目中,先通过发送一个网站访问获取到分配的token值,再将token值作为cookie中的参数保存,并代入登陆后的所有页request结果证明通过基于testng的接口测试模拟登录结果可以实现防范CSRF攻击,明显提高了网站的安全性和可靠性。
阅读(3166)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'接口测试中如何通过csrftoken实现https登录',
blogAbstract:'什么是CSRF攻击由于所处的项目是新项目为了防止CSRF攻击,在后端上加入CSRF的防范攻击措施,那么很多同学就好奇什么是CSRF攻击,下面是关于CSRF的解释:Cross-Site Request Forgery (CSRF)',
blogTag:'',
blogUrl:'blog/static/7',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:2,
permalink:'blog/static/7',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'网易杭州 QA Team\r\n\r\n\r\n\r\n务实 专注 分享 做有态度的QA',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}浅谈cnode社区如何防止csrf攻击 - CNode技术社区
秦晋之巅社区(qjzd.net)作者
csrf是什么
csrf(Cross-site request forgery)跨站请求伪造, 具体谷歌度娘.
防止csrf攻击简单思路:
在服务器上生成一个token, web端发起的请求都带上token这个参数, 请求中的token与服务端的token不一致,则抛出错误.
涉及主要模块代码
layout.html, jquery-ujs.js, app.js, csurf模块
1 服务端如何生产成token, token存储的位置
app.use(function (req, res, next) {
if (req.path.indexOf('/api') === -1) {
csurf()(req, res, next);
因csurlf未带入参{ cookie: true }, 故token将会保存session中(其实session不是存放token, 而是能一个secret, 通过secret可生产token且能还原token)
csurf()(req, res, next); 该行代码被执行时, 会在为req添加一个方法csrfToken, 接下来来会用到, 如下所示.
app.use(function (req, res, next) {
res.locals.csrf = req.csrfToken ? req.csrfToken() : '';
req.csrfToken() ; 该行代码被执行,会生成一个token, 并保存session中.
req.csrfToken()保存token的部分代码, 如下所示.
csurf模块 index.js
// generate & set new secret
if (sec === undefined) {
sec = tokens.secretSync()
setsecret(req, res, sec, cookie)
2 服务端什么时候校验
app.use(function (req, res, next) {
if (req.path.indexOf('/api') === -1) {
csurf()(req, res, next);
除/api开头请求, 都会执行csurf方法, token的校验也是在该方法里, csurf方法部分代码如下所示
csurf模块 index.js
verifytoken(req, tokens, secret, value(req))
3 服务端校验的token, 可能来自哪里.
web端请求中的token, 不一定只来自于所传送的参数.
csurf模块 index.js
function defaultValue(req) {
return (req.body && req.body._csrf)
|| (req.query && req.query._csrf)
|| (req.headers['x-csrf-token'])
|| (req.headers['x-xsrf-token']);
因csurlf初始化时没带任何参数,
故校验的token使用使用默认的值,
从代码上, 默认的token可能来自req.body, req.query, req.header
4 哪些请求不校验token.
从app.js 的代码中可以看出, /api开头的请求是不会校验的, 但果真如此么, 如果真是这样, 那不是访问首页, 都会被拦截.
csurf模块 index.js
// verify the incoming token
if (!ignoreMethod[req.method]) {
verifytoken(req, tokens, secret, value(req))
从代码上, 部分req.method方法是被忽略校验的, 那到底是什么mehtod呢, 具体如下所示
csurf模块 index.js
// ignored methods
var ignoreMethods = options.ignoreMethods === undefined
? ['GET', 'HEAD', 'OPTIONS']
: options.ignoreMethods
因csurlf初始化时没带任何参数, 故使用默认的ignoreMethods, get head option会被忽略校验, 所以我们就可以很正常的访问首页
5 token什么时候到页面上的.
app.use(function (req, res, next) {
res.locals.csrf = req.csrfToken ? req.csrfToken() : '';
layout.xml
&meta content=&_csrf& name=&csrf-param&&
&meta content=&&%= csrf %&& name=&csrf-token&&
在页面初始化的时候, token被放在到了 meta标签后, 之后请求数据, 就可以利用这些值了.
6 web端token参数什么时候传到服务端.
web端的token需要时请求时传入的, 但是现在只有meta标签有csrf-token的值, 这个token时什么时候被利用的呢
jquery.ujs.js
// Make sure that every Ajax request sends the CSRF token
CSRFProtection: function (xhr) {
var token = $('meta[name=&csrf-token&]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
// making sure that all forms have actual up-to-date token(cached forms contain old one)
refreshCSRFTokens: function () {
var csrfToken = $('meta[name=csrf-token]').attr('content');
var csrfParam = $('meta[name=csrf-param]').attr('content');
$('form input[name=&' + csrfParam + '&]').val(csrfToken);
jquery.ujs.js
$.ajaxPrefilter(function (options, originalOptions, xhr) {
if (!options.crossDomain) {
rails.CSRFProtection(xhr);
jquery.ujs.js
$(function () {
rails.refreshCSRFTokens();
从代码中看出, 在发ajax请求的时候,会在header.X-CSRF-Token附上token值.
在form表单请求的时候, 会添加token的值.
以上代码摘录于cnnode源码git版本号为a52a6deb50667fff
以上如有理解不当之处, 望提点指正.
哎哟,被加精了,感谢感谢~.~
这样的防御csrf机制,只是防御一些url劫持或xss之后的csrf,加了token
就算你判断referrer
也不可能防刷。
如果写一个自动化的脚本,自动化地执行以下逻辑: 先向种token的url发起一个get请求取得token,再向需要刷的/api接口发送post/get请求,这层防御机制就被破了。
加referrer也是对于来自浏览器的http请求进行了限制,
但是黑客写自动化脚本伪造的请求,你根本不可能用token+referrer的形式防住。
要防,还是得上万恶的验证码。
csrf是防止跨站请求伪造。
比如你在一台机器同时打开了两个标签页a网站和b网站, 如果用户a网站已经登入,并打开b网站点击了某个按钮,刚好这个按钮背后伪造并发起a网站的请求,比如购买商品的请求,因为cookie对同一个url是共享的,会导致用户被恶意购买商品。
csrf是解决此类问题,并不是为了解决防刷问题。要解决防刷应该在服务端对ip等信息做访问限制,万恶的验证码也可以,不过验证码用户体验真的太差了,登入的时候用用也就可以了。
还设置了不允许外部网站使用iframe引入cnode
X-Frame-Options:SAMEORIGIN
rails的默认做法, 贴出了node的实现, 当赞!
对于什么是csrf,道哥的《白帽子web安全》清楚地说了,“如果一个请求中所有参数都是可以预期的,那么这个请求就有被csrf的风险”,我在博客中也对csrf的各种应用场景和实践经历进行了描述:
如果一定要抱着“跨站请求伪造”这个带有历史原因的漏洞名字不放, 那么XSS的名字还叫跨站脚本攻击呢,你能说你在一个留言板里直接输入个alert(1)那不算xss吗?
也就是说,如果刻意写代码来获取token,然后伪造请求,这种攻击这个方法是不是就防止不了?
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的CSRF防御,token保存在服务器session中,客户端是如何获取token? - 知乎70被浏览17786分享邀请回答157 条评论分享收藏感谢收起2添加评论分享收藏感谢收起查看更多回答CSRF是什么?CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造...
有哪些方法可以不使用csrf token就能防御csrf?
Redis CSRF漏洞分析 近日有网友暴漏了Redis的CSRF漏洞,同时Redis作者在最新发布的3.2.7也进行了修复,本文将对CSRF攻击及如何安全使用Redis进行介绍。阿里云云数据库Redis版强制需要密码访问,不受该漏洞影响,而...
tools)可以很容易地构造各种基本的CSRF攻击POC,包括通过XHR请求进行的CSRF攻击。在这篇文章里,我将要讨论下我经常碰到的一些CSRF攻击场景,看到社区里很多研究者对这个攻击场景都很好奇,我将尽可能的把它说清楚。...
在那个年代,大家一般用...通过 XSS 来实现 CSRF 易如反掌,但对于设计不佳的网站,一条正常的链接都能造成 CSRF。例如,一论坛网站的发贴是通过 GET 请求访问,点击发贴之后 JS 把发贴内容拼接成目标 URL 并访问: ...
我的系统是windows 2012 Service R2,解压了phpmyadmin4.6.6后...Error Failed to generate random CSRF token!请问这是什么原因呢?应该怎么解决呢?我的系统中已经安装并启动了mysql5.7.17,也可以正常访问mysql。
在浏览器中需要使用Ajax访问REST API,Token保存在cookie或localstorage中是否可行,会不会被窃取或者CSRF攻击?如果使用JS读取来添加到请求中,那么当第一次访问时,如何带上Token?(根据有无Token判断用户身份来渲染首页...
什么是CSRF CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去-购买商品、发邮件,恶意的去消耗账户资源,导致的...
背景 1、什么是CSRF攻击?这里不再介绍CSRF,已经了解CSRF原理的同学可以直接跳到:“3、前后端分离下有何不同?不太了解的同学可以看这两篇对CSRF介绍比较详细的参考文章:CSRF 攻击的应对之道 浅谈CSRF攻击方式 如果...
在“开放式Web应用程序安全项目”(OWASP)的榜单中,CSRF(又称XSRF)就位于前10的位置。简而言之,就是恶意软件强制浏览器在用户已认证的上下文环境中,执行原本并不需要的指令。浏览器厂家深知这一危害,从而推出了...
本节书摘来自异步社区《XSS跨站脚本攻击剖析与防御》一书中的第6章6.5节利用Flash进行CSRF,作者邱永华,更多章节内容可以访问云栖社区“异步社区”公众号查看。6.5 利用Flash进行CSRF*XSS跨站脚本攻击剖析与防御 ...
谨记:跨域相关的东西,有接触过,但是没有深入过。说实话,我个人还没有完完全全独立一个人去完成一个大项目并维护比较长时间(一般人估计都没有这样的机会吧),然后不断完善它,很多非业务逻辑相关的代码健壮性增强...
需要代码,如何防止站外提交数据
Bypass只验证Referrer的CSRF防御 ```/Edge only/Ref:.ar/demo
Spring MVC Autobinding漏洞实例初窥 07-20-回复:10,人气:2180-技术讨论#概述 在整理完这边文章时,nowill也在先知社区发了...
本文将对CSRF攻击及云数据库Redis的安全要点进行介绍。了解详情 会议感悟 2016美国QCon看法:在Beam上,我为什么说Google有统一流式计算的野心 流式计算目前生态繁荣但又分散,各个平台之间也是互不兼容的。这些领域...
包括常见的web安全漏洞、包括XSS(跨站脚本攻击)、SQL注入漏洞、CSRF漏洞、点击劫持漏洞、上传漏洞、钓鱼等原理知识,方便选手理解WEB安全相关的题目。《日志管理与分析权威指南》推荐地址:...
forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息...
CSRF攻击方式早几年并不为大家所熟知,实际上很多网站都存在CSRF的安全漏洞。早在2000年,CSRF这种攻击方式已经由国外的安全人员提出,但在国内,直到2006年才开始被关注。2008年,国内外多个大型社区和交互网站先后...
scanning,brute force password cracking,XSS and CSRF attacks.In this article, we will look at some of these attacks in detail and introduce some methods to protect against these attacks.#SQL Injection ...
未解决问题?到论坛提问试试吧!
你可能感兴趣跨域post 及 使用token防止csrf 攻击 - CSDN博客
跨域post 及 使用token防止csrf 攻击
后台使用的python - flask
前台使用angular框架
1.一个跨域post的例子:
跨域post有多种实现方式:
2.利用iframe
3.server proxy:
例子使用的为iframe,想要证明,在没有进行csrf防御时,任意攻击者可以利用javascript发送 post 请求,从而简单的提交或获取数据资料;
1.本地test.html页面
type="text/javascript" src="jquery-2.1.4.min.js"&&
type="button" onclick="test();" value="test"/&
type="text/javascript"&
function test() {
crossDomainPost({
url: 'http://localhost:5000/test',
param: {a: '1', b: '2'},
onSubmit: function (e) {
console.log(e);
function crossDomainPost(config) {
var def = {
: function (i) {}
= $.extend({}, def, config);
if (!config.url) {
config.onSubmit({error: 'URL is Empty!'});
var createGuid
= function () {
var guid = "";
for (var i = 1; i &= 10; i++) {
guid += Math.floor(Math.random() * 16.0).toString(16);
removeElement = function (_element) {
var _parentElement = _element.parentN
if (_parentElement) {
_parentElement.removeChild(_element);
var iframe
= document.createElement("iframe");
var uniqueString
= createGuid();
document.body.appendChild(iframe);
iframe.style.display
iframe.contentWindow.name = uniqueS
= document.createElement("form");
form.target = uniqueS
form.action = config.
form.method = "POST";
for (var item in config.param) {
= document.createElement("input");
input.type
= "hidden";
input.name
input.value = config.param[ item ];
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}catch(e){
console.log('error');
consoel.log(e);
setTimeout(function () {
config.onSubmit(iframe);
removeElement(form);
}, config.delay);
2.后台接收代码
这里仅接收POST的请求
@app.route('/test' ,methods=['POST'])
def test():
print 'param is :';
print request.form
return jsonify(data='2222')
3.控制台输出:
服务端处理了非站内的请求
4.浏览器输出:
本地test.html获取到返回信息
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
登录受信任网站A,并在本地生成Cookie。
在不登出A的情况下,访问危险网站B。
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
原理详细:
2.常见的攻击类型:
1.GET类型的CSRF
只需要一个HTTP请求,就可以构造一次简单的CSRF。
银行网站A:它以GET请求来完成银行转账的操作,如:
危险网站B:它里面有一段HTML的代码如下:
src=http:///Transfer.php?toBankId=11&money=1000&
首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块
为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源 ,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作
2.POST类型的CSRF
如上边的跨域POST例子
3.如何防御CSRF
1.提交验证码
在表单中增加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
2.Referer Check
检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。
3.token验证
在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有
token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
token需要足够随机
敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。
4.在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
4.关于token
Token 应该被保存起来(放到 )
Tokens 除了像 cookie 一样有有效期,而且你可以有更多的操作方法。一旦 token 过期,只需要重新获取一个。你可以使用一个接口去刷新 token;你甚至可以把 token 原来的发布时间也保存起来,并且强制在两星期后重新登录什么的;如果你需要撤回 tokens(当 token 的生存期比较长的时候这很有必要)那么你需要一个 token 的生成管理器去作检查。
Local / session storage 不会跨域工作,请使用一个标记 cookie
有需要的话,要加密并且签名 token
将 JSON Web Tokens 应用到 OAuth 2
1.引入csrf
from flask_wtf.csrf import CsrfProtect
csrf = CsrfProtect()
app = Flask(__name__)
csrf.init_app(app)
app.config['SECRET_KEY']='myblog'
2.在站内页面上head中,增加token
name="csrf-token" content="{{ csrf_token() }}&
3.配置angular提交表头
app.config(function ($httpProvider) {
$httpProvider.mon['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
4.再次测试跨域post
后台输出:
前台输出:
关于webapp跨域Post使用token思路:
移动端登录时,服务端验证表单信息,登陆成功,生成token,返回给客户端;
客户端将token存在localstorage/sessionstorage中,每次提交表单,都需要携带token;
服务端获取请求,如果没有token,则忽略请求;
出现的问题:
服务端需要限制登陆次数
解决方法:
客户端增加登陆间隔,请求一次后,等待x秒才能再次请求
服务端做cas验证
服务端需要保存用户的token,及过期时间;
解决方法:
可以将token 保存在Memcache,数据库中,redis
客户端存token时,需要对token加密
解决方法:
在存储的时候把token进行对称加密存储,用时解开
将请求URL、时间戳、token三者进行合并加盐签名,服务端校验有效性
当然,以上只防君子,不防小人
跨域post请求:
跨站请求伪造:
本文已收录于以下专栏:
相关文章推荐
上文我转载了两篇关于ThinkPHP令牌验证的文章(ThinkPHP中的create方法与自动令牌验证)。其中提及到了  token ,这里针对 token 的作用,转载了另外两篇文章。
(web安全...
* PHP简单利用token防止表单重复提交
* 此处理方法纯粹是为了给初学者参考
session_start();
function set_token() {
【名词解释】
跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript
同源策略...
原先一直以为要实现跨域请求只能用jsonp,只能支持GET请求,后来了解到使用POST请求也可以实现跨域,但是需要在服务器增加Access-Control-Allow-Origin和Access-Co...
前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对...
本文介绍什么是CSRF攻击,及如何在ASP.NET MVC网站应用程序中阻止CSRF攻击。
三、PHP网络编程
[!!!]1.禁用COOKIE后SEESION还能用吗?(51.com笔试题)
可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所...
Token,就是令牌,最大的特点就是随机性,不可预测。一般黑客或软件
原文地址:点击打开链接
最近模拟登陆,发现CsrfToken是个很麻烦的问题,所以看了一下CsrfToken的一些介绍。发现这篇文章写得很不错,所以转载过来。
CSRF 背景与介绍
本文说一下SpringMVC如何防御CSRF(Cross-site request
forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击)。
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 invalid csrf token 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信